diff options
author | Anders Broman <anders.broman@ericsson.com> | 2007-01-06 20:51:03 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2007-01-06 20:51:03 +0000 |
commit | c2b459f78feb4c5893c8a5d06344feb5cf22860f (patch) | |
tree | 20b85119d09548c387248de21d1859a929cf6d11 | |
parent | fda137ce6ae65503569e91f96dc795197693a3f2 (diff) |
Check in the asn2wrs generated ANSI map dissector.
svn path=/trunk/; revision=20334
-rw-r--r-- | asn1/ansi_map/ansi_map.asn | 7 | ||||
-rw-r--r-- | asn1/ansi_map/ansi_map.cnf | 2 | ||||
-rw-r--r-- | asn1/ansi_map/packet-ansi_map-template.c | 10 | ||||
-rw-r--r-- | epan/dissectors/packet-ansi_map.c | 24641 | ||||
-rw-r--r-- | epan/dissectors/packet-ansi_map.h | 25 |
5 files changed, 13856 insertions, 10829 deletions
diff --git a/asn1/ansi_map/ansi_map.asn b/asn1/ansi_map/ansi_map.asn index fc74d55572..407d22e6c8 100644 --- a/asn1/ansi_map/ansi_map.asn +++ b/asn1/ansi_map/ansi_map.asn @@ -5,6 +5,10 @@ MAP-Protocol{ 0 identified-organization (4) etsi (0) mobileDomain (0) gsm-Networ DEFINITIONS ::= BEGIN +-- Import from GSM MAP for convenience +IMPORTS + IMSI + FROM MAP-Protocol; -- TCAP part @@ -6061,7 +6065,8 @@ MSID ::= CHOICE { -- 1 0 0 1 1 1 1 1 (0x9f) -- 1 0 0 0 0 0 0 1 (0x81) -- 0 1 1 1 0 0 1 0 (0x72)(242) -IMSI ::= OCTET STRING +-- Import from GSM MAP for convenience +-- IMSI ::= OCTET STRING -- 6.5.2.bw N.S0012-0 v 1.0 -- 1 0 0 1 1 1 1 1 (0x9f) diff --git a/asn1/ansi_map/ansi_map.cnf b/asn1/ansi_map/ansi_map.cnf index 65776a711c..eb2c13157d 100644 --- a/asn1/ansi_map/ansi_map.cnf +++ b/asn1/ansi_map/ansi_map.cnf @@ -3,7 +3,7 @@ # Copyright 2005-2007 Anders Broman # $Id$ - +#.INCLUDE ../gsmmap/gsm_map-exp.cnf #.EXPORTS #.PDU diff --git a/asn1/ansi_map/packet-ansi_map-template.c b/asn1/ansi_map/packet-ansi_map-template.c index 1c66977d9b..0724929392 100644 --- a/asn1/ansi_map/packet-ansi_map-template.c +++ b/asn1/ansi_map/packet-ansi_map-template.c @@ -2243,27 +2243,27 @@ static const true_false_string ansi_map_systemcapabilities_auth_bool_val = { }; static const true_false_string ansi_map_systemcapabilities_se_bool_val = { - "Signaling Message Encryption supported by the system" + "Signaling Message Encryption supported by the system", "Signaling Message Encryption not supported by the system" }; static const true_false_string ansi_map_systemcapabilities_vp_bool_val = { - "Voice Privacy supported by the system" + "Voice Privacy supported by the system", "Voice Privacy not supported by the system" }; static const true_false_string ansi_map_systemcapabilities_cave_bool_val = { - "System can execute the CAVE algorithm and share SSD for the indicated MS" + "System can execute the CAVE algorithm and share SSD for the indicated MS", "System cannot execute the CAVE algorithm and cannot share SSD for the indicated MS" }; static const true_false_string ansi_map_systemcapabilities_ssd_bool_val = { - "SSD is shared with the system for the indicated MS" + "SSD is shared with the system for the indicated MS", "SSD is not shared with the system for the indicated MS" }; static const true_false_string ansi_map_systemcapabilities_dp_bool_val = { - "DP is supported by the system" + "DP is supported by the system", "DP is not supported by the system" }; diff --git a/epan/dissectors/packet-ansi_map.c b/epan/dissectors/packet-ansi_map.c index b739f72980..7b3c164115 100644 --- a/epan/dissectors/packet-ansi_map.c +++ b/epan/dissectors/packet-ansi_map.c @@ -1,17 +1,46 @@ +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Wireshark dissector compiler */ +/* .\packet-ansi_map.c */ +/* ../../tools/asn2wrs.py -b -e -p ansi_map -c ansi_map.cnf -s packet-ansi_map-template ansi_map.asn */ + +/* Input file: packet-ansi_map-template.c */ + +#line 1 "packet-ansi_map-template.c" /* packet-ansi_map.c * Routines for ANSI 41 Mobile Application Part (IS41 MAP) dissection * Specications from 3GPP2 (www.3gpp2.org) - * - * Copyright 2003, Michael Lum <mlum [AT] telostech.com> + * Based on the dissector by : + * Michael Lum <mlum [AT] telostech.com> * In association with Telos Technology Inc. * - * Should be very close to what ANSI/TIA/EIA-41-E will be as most known - * changes have been added: i.e. IS-778, IS-751, IS-725, IS-841, ... + * Copyright 2005 - 2007, Anders Broman <anders.broman@ericsson.com> + * + * $Id$ + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * 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 + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Credit to Tomas Kukosa for developing the asn2wrs compiler. * * Title 3GPP2 Other * * Cellular Radiotelecommunications Intersystem Operations - * 3GPP2 N.S0005-0 ANSI/TIA/EIA-41-D + * 3GPP2 N.S0005-0 v 1.0 ANSI/TIA/EIA-41-D * * Network Support for MDN-Based Message Centers * 3GPP2 N.S0024-0 v1.0 IS-841 @@ -19,32 +48,15 @@ * Enhanced International Calling * 3GPP2 N.S0027 IS-875 * - * E-911 Phase 2 - * 3GPP2 N.S0030 J-STD-036-A - * XXX Teleservice_Priority not implemented, no parameter ID given! - * * ANSI-41-D Miscellaneous Enhancements Revision 0 * 3GPP2 N.S0015 PN-3590 (ANSI-41-E) * - * TIA/EIA-41-D Internationalization - * 3GPP2 N.S0016-0 v1.0 - * * Authentication Enhancements * 3GPP2 N.S0014-0 v1.0 IS-778 * - * PCS Multi-band-Based on IS-41C - * 3GPP2 N.S0006-0 v1.0 TIA/EIA TSB-76 - * - * Roamer Database Verification Revision B - * 3GPP2 N.S0025-B v1.0 IS-947 (aka IS-847 ?) - * XXX InvokingNEType not implemented, no parameter ID given! - * * Features In CDMA * 3GPP2 N.S0010-0 v1.0 IS-735 * - * TIA/EIA-41-D Based Network Enhancements for CDMA Packet Data Service (C-PDS), Phase 1 - * 3GPP2 N.S0029-0 v1.0 IS-880 - * * OTASP and OTAPA * 3GPP2 N.S0011-0 v1.0 IS-725-A * @@ -58,6 +70,13 @@ * WIN Phase 1 * 3GPP2 N.S0013-0 v1.0 IS-771 * + * DCCH (Clarification of Audit Order with Forced + * Re-Registration in pre-TIA/EIA-136-A Implementation + * 3GPP2 A.S0017-B IS-730 + * + * UIM + * 3GPP2 N.S0003 + * * WIN Phase 2 * 3GPP2 N.S0004-0 v1.0 IS-848 * @@ -67,460 +86,865 @@ * User Selective Call Forwarding * 3GPP2 N.S0021-0 v1.0 IS-838 * - * CNAP/CNAR - * 3GPP2 N.S0012-0 v1.0 * * Answer Hold * 3GPP2 N.S0022-0 v1.0 IS-837 * - * Automatic Code Gapping - * 3GPP2 N.S0023-0 v1.0 - * * UIM * 3GPP2 N.S0003 * - * $Id$ - * - * Wireshark - Network traffic analyzer - * By Gerald Combs <gerald@wireshark.org> - * 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 - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ + */ #ifdef HAVE_CONFIG_H # include "config.h" #endif -#include <stdio.h> -#include <stdlib.h> - -#include <string.h> - -#include "epan/packet.h" +#include <glib.h> +#include <epan/packet.h> #include <epan/prefs.h> -#include <epan/asn1.h> +#include <epan/conversation.h> #include <epan/tap.h> #include <epan/emem.h> -#include "packet-ansi_a.h" +#include <stdio.h> +#include <string.h> + #include "packet-ansi_map.h" +#include "packet-ansi_a.h" +#include "packet-gsm_map.h" +#include "packet-ber.h" #include "packet-tcap.h" - +#define PNAME "ANSI Mobile Application Part" +#define PSNAME "ANSI MAP" +#define PFNAME "ansi_map" /* Preferenc settings default */ #define MAX_SSN 254 static range_t *global_ssn_range; static range_t *ssn_range; -static dissector_handle_t ansi_map_handle; +static dissector_handle_t ansi_map_handle=NULL; -/* PROTOTYPES/FORWARDS */ +/* Initialize the protocol and registered fields */ +static int ansi_map_tap = -1; +static int proto_ansi_map = -1; -static gboolean dissect_ansi_param(ASN1_SCK *asn1, proto_tree *tree); +static int hf_ansi_map_op_code_fam = -1; +static int hf_ansi_map_op_code = -1; +static int hf_ansi_map_type_of_digits = -1; +static int hf_ansi_map_na = -1; +static int hf_ansi_map_pi = -1; +static int hf_ansi_map_navail = -1; +static int hf_ansi_map_si = -1; +static int hf_ansi_map_digits_enc = -1; +static int hf_ansi_map_np = -1; +static int hf_ansi_map_nr_digits = -1; +static int hf_ansi_map_bcd_digits = -1; +static int hf_ansi_map_ia5_digits = -1; +static int hf_ansi_map_subaddr_type = -1; +static int hf_ansi_map_subaddr_odd_even = -1; +static int hf_ansi_alertcode_cadence = -1; +static int hf_ansi_alertcode_pitch = -1; +static int hf_ansi_alertcode_alertaction = -1; +static int hf_ansi_map_announcementcode_tone = -1; +static int hf_ansi_map_announcementcode_class = -1; +static int hf_ansi_map_announcementcode_std_ann = -1; +static int hf_ansi_map_announcementcode_cust_ann = -1; +static int hf_ansi_map_authorizationperiod_period = -1; +static int hf_ansi_map_value = -1; +static int hf_ansi_map_msc_type = -1; +static int hf_ansi_map_handoffstate_pi = -1; +static int hf_ansi_map_tgn = -1; +static int hf_ansi_map_tmn = -1; +static int hf_ansi_map_messagewaitingnotificationcount_tom = -1; +static int hf_ansi_map_messagewaitingnotificationcount_no_mw = -1; +static int hf_ansi_map_messagewaitingnotificationtype_mwi = -1; +static int hf_ansi_map_messagewaitingnotificationtype_apt = -1; +static int hf_ansi_map_messagewaitingnotificationtype_pt = -1; + +static int hf_ansi_map_trans_cap_prof = -1; +static int hf_ansi_map_trans_cap_busy = -1; +static int hf_ansi_map_trans_cap_ann = -1; +static int hf_ansi_map_trans_cap_rui = -1; +static int hf_ansi_map_trans_cap_spini = -1; +static int hf_ansi_map_trans_cap_uzci = -1; +static int hf_ansi_map_trans_cap_ndss = -1; +static int hf_ansi_map_trans_cap_nami = -1; +static int hf_ansi_trans_cap_multerm = -1; +static int hf_ansi_map_terminationtriggers_busy = -1; +static int hf_ansi_map_terminationtriggers_rf = -1; +static int hf_ansi_map_terminationtriggers_npr = -1; +static int hf_ansi_map_terminationtriggers_na = -1; +static int hf_ansi_map_terminationtriggers_nr = -1; +static int hf_ansi_trans_cap_tl = -1; +static int hf_ansi_trans_cap_waddr = -1; +static int hf_ansi_map_MarketID = -1; +static int hf_ansi_map_swno = -1; +static int hf_ansi_map_idno = -1; +static int hf_ansi_map_segcount = -1; +static int hf_ansi_map_systemcapabilities_auth = -1; +static int hf_ansi_map_systemcapabilities_se = -1; +static int hf_ansi_map_systemcapabilities_vp = -1; +static int hf_ansi_map_systemcapabilities_cave = -1; +static int hf_ansi_map_systemcapabilities_ssd = -1; +static int hf_ansi_map_systemcapabilities_dp = -1; + +static int hf_ansi_map_mslocation_lat = -1; +static int hf_ansi_map_mslocation_long = -1; +static int hf_ansi_map_mslocation_res = -1; +static int hf_ansi_map_nampscallmode_namps = -1; +static int hf_ansi_map_nampscallmode_amps = -1; +static int hf_ansi_map_nampschanneldata_navca = -1; +static int hf_ansi_map_nampschanneldata_CCIndicator = -1; + +static int hf_ansi_map_callingfeaturesindicator_cfufa = -1; +static int hf_ansi_map_callingfeaturesindicator_cfbfa = -1; +static int hf_ansi_map_callingfeaturesindicator_cfnafa = -1; +static int hf_ansi_map_callingfeaturesindicator_cwfa = -1; +static int hf_ansi_map_callingfeaturesindicator_3wcfa = -1; +static int hf_ansi_map_callingfeaturesindicator_pcwfa =-1; +static int hf_ansi_map_callingfeaturesindicator_dpfa = -1; +static int hf_ansi_map_callingfeaturesindicator_ahfa = -1; +static int hf_ansi_map_callingfeaturesindicator_uscfvmfa = -1; +static int hf_ansi_map_callingfeaturesindicator_uscfmsfa = -1; +static int hf_ansi_map_callingfeaturesindicator_uscfnrfa = -1; +static int hf_ansi_map_callingfeaturesindicator_cpdsfa = -1; +static int hf_ansi_map_callingfeaturesindicator_ccsfa = -1; +static int hf_ansi_map_callingfeaturesindicator_epefa = -1; +static int hf_ansi_map_callingfeaturesindicator_cdfa = -1; +static int hf_ansi_map_callingfeaturesindicator_vpfa = -1; +static int hf_ansi_map_callingfeaturesindicator_ctfa = -1; +static int hf_ansi_map_callingfeaturesindicator_cnip1fa = -1; +static int hf_ansi_map_callingfeaturesindicator_cnip2fa = -1; +static int hf_ansi_map_callingfeaturesindicator_cnirfa = -1; +static int hf_ansi_map_callingfeaturesindicator_cniroverfa = -1; +static int hf_ansi_map_cdmacallmode_cdma = -1; +static int hf_ansi_map_cdmacallmode_amps = -1; +static int hf_ansi_map_cdmacallmode_namps = -1; +static int hf_ansi_map_cdmacallmode_cls1 = -1; +static int hf_ansi_map_cdmacallmode_cls2 = -1; +static int hf_ansi_map_cdmacallmode_cls3 = -1; +static int hf_ansi_map_cdmacallmode_cls4 = -1; +static int hf_ansi_map_cdmacallmode_cls5 = -1; +static int hf_ansi_map_cdmacallmode_cls6 = -1; +static int hf_ansi_map_cdmacallmode_cls7 = -1; +static int hf_ansi_map_cdmacallmode_cls8 = -1; +static int hf_ansi_map_cdmacallmode_cls9 = -1; +static int hf_ansi_map_cdmacallmode_cls10 = -1; + +static int hf_ansi_map_cdmastationclassmark_pc = -1; +static int hf_ansi_map_cdmastationclassmark_dtx = -1; +static int hf_ansi_map_cdmastationclassmark_smi = -1; +static int hf_ansi_map_cdmastationclassmark_dmi = -1; +static int hf_ansi_map_channeldata_vmac = -1; +static int hf_ansi_map_channeldata_dtx = -1; +static int hf_ansi_map_channeldata_scc = -1; +static int hf_ansi_map_channeldata_chno = -1; +static int hf_ansi_map_ConfidentialityModes_vp = -1; +static int hf_ansi_map_ConfidentialityModes_se = -1; +static int hf_ansi_map_deniedauthorizationperiod_period = -1; +static int hf_ansi_map_ConfidentialityModes_dp = -1; + +static int hf_ansi_map_originationtriggers_all = -1; +static int hf_ansi_map_originationtriggers_local = -1; +static int hf_ansi_map_originationtriggers_ilata = -1; +static int hf_ansi_map_originationtriggers_olata = -1; +static int hf_ansi_map_originationtriggers_int = -1; +static int hf_ansi_map_originationtriggers_wz = -1; +static int hf_ansi_map_originationtriggers_unrec = -1; +static int hf_ansi_map_originationtriggers_rvtc = -1; +static int hf_ansi_map_originationtriggers_star = -1; +static int hf_ansi_map_originationtriggers_ds = -1; +static int hf_ansi_map_originationtriggers_pound = -1; +static int hf_ansi_map_originationtriggers_dp = -1; +static int hf_ansi_map_originationtriggers_pa = -1; +static int hf_ansi_map_originationtriggers_nodig = -1; +static int hf_ansi_map_originationtriggers_onedig = -1; +static int hf_ansi_map_originationtriggers_twodig = -1; +static int hf_ansi_map_originationtriggers_threedig = -1; +static int hf_ansi_map_originationtriggers_fourdig = -1; +static int hf_ansi_map_originationtriggers_fivedig = -1; +static int hf_ansi_map_originationtriggers_sixdig = -1; +static int hf_ansi_map_originationtriggers_sevendig = -1; +static int hf_ansi_map_originationtriggers_eightdig = -1; +static int hf_ansi_map_originationtriggers_ninedig = -1; +static int hf_ansi_map_originationtriggers_tendig = -1; +static int hf_ansi_map_originationtriggers_elevendig = -1; +static int hf_ansi_map_originationtriggers_thwelvedig = -1; +static int hf_ansi_map_originationtriggers_thirteendig = -1; +static int hf_ansi_map_originationtriggers_fourteendig = -1; +static int hf_ansi_map_originationtriggers_fifteendig = -1; +static int hf_ansi_map_triggercapability_init = -1; +static int hf_ansi_map_triggercapability_kdigit = -1; +static int hf_ansi_map_triggercapability_all = -1; +static int hf_ansi_map_triggercapability_rvtc = -1; +static int hf_ansi_map_triggercapability_oaa = -1; +static int hf_ansi_map_triggercapability_oans = -1; +static int hf_ansi_map_triggercapability_odisc = -1; +static int hf_ansi_map_triggercapability_ona = -1; +static int hf_ansi_map_triggercapability_ct = -1; +static int hf_ansi_map_triggercapability_unrec =-1; +static int hf_ansi_map_triggercapability_pa = -1; +static int hf_ansi_map_triggercapability_at = -1; +static int hf_ansi_map_triggercapability_cgraa = -1; +static int hf_ansi_map_triggercapability_it = -1; +static int hf_ansi_map_triggercapability_cdraa = -1; +static int hf_ansi_map_triggercapability_obsy = -1; +static int hf_ansi_map_triggercapability_tra = -1; +static int hf_ansi_map_triggercapability_tbusy = -1; +static int hf_ansi_map_triggercapability_tna = -1; +static int hf_ansi_map_triggercapability_tans = -1; +static int hf_ansi_map_triggercapability_tdisc = -1; +static int hf_ansi_map_winoperationscapability_conn = -1; +static int hf_ansi_map_winoperationscapability_ccdir = -1; +static int hf_ansi_map_winoperationscapability_pos = -1; +static int hf_ansi_map_PACA_Level = -1; +static int hf_ansi_map_pacaindicator_pa = -1; + + +/*--- Included file: packet-ansi_map-hf.c ---*/ +#line 1 "packet-ansi_map-hf.c" +static int hf_ansi_map_AuthenticationDirective_PDU = -1; /* AuthenticationDirective */ +static int hf_ansi_map_AuthenticationDirectiveRes_PDU = -1; /* AuthenticationDirectiveRes */ +static int hf_ansi_map_OriginationRequest_PDU = -1; /* OriginationRequest */ +static int hf_ansi_map_OriginationRequestRes_PDU = -1; /* OriginationRequestRes */ +static int hf_ansi_map_invokeLast = -1; /* InvokePDU */ +static int hf_ansi_map_returnResultLast = -1; /* ReturnResultPDU */ +static int hf_ansi_map_returnError = -1; /* ReturnErrorPDU */ +static int hf_ansi_map_reject = -1; /* RejectPDU */ +static int hf_ansi_map_invokeNotLast = -1; /* InvokePDU */ +static int hf_ansi_map_returnResultNotLast = -1; /* ReturnResultPDU */ +static int hf_ansi_map_componentIDs = -1; /* OCTET_STRING_SIZE_0_2 */ +static int hf_ansi_map_operationCode = -1; /* OperationCode */ +static int hf_ansi_map_invokeParameters = -1; /* InvokeParameters */ +static int hf_ansi_map_componentID = -1; /* ComponentID */ +static int hf_ansi_map_returnResult = -1; /* ReturnParameters */ +static int hf_ansi_map_errorCode = -1; /* ErrorCode */ +static int hf_ansi_map_parameterre = -1; /* RejectParameters */ +static int hf_ansi_map_rejectProblem = -1; /* ProblemPDU */ +static int hf_ansi_map_parameterrj = -1; /* RejectParameters */ +static int hf_ansi_map_national = -1; /* INTEGER_M32768_32767 */ +static int hf_ansi_map_private = -1; /* PrivateOperationCode */ +static int hf_ansi_map_nationaler = -1; /* INTEGER_M32768_32767 */ +static int hf_ansi_map_privateer = -1; /* INTEGER */ +static int hf_ansi_map_electronicSerialNumber = -1; /* ElectronicSerialNumber */ +static int hf_ansi_map_msid = -1; /* MSID */ +static int hf_ansi_map_authenticationAlgorithmVersion = -1; /* AuthenticationAlgorithmVersion */ +static int hf_ansi_map_authenticationResponseReauthentication = -1; /* AuthenticationResponseReauthentication */ +static int hf_ansi_map_authenticationResponseUniqueChallenge = -1; /* AuthenticationResponseUniqueChallenge */ +static int hf_ansi_map_callHistoryCount = -1; /* CallHistoryCount */ +static int hf_ansi_map_cdmaPrivateLongCodeMask = -1; /* CDMAPrivateLongCodeMask */ +static int hf_ansi_map_carrierDigits = -1; /* CarrierDigits */ +static int hf_ansi_map_denyAccess = -1; /* DenyAccess */ +static int hf_ansi_map_destinationDigits = -1; /* DestinationDigits */ +static int hf_ansi_map_locationAreaID = -1; /* LocationAreaID */ +static int hf_ansi_map_randomVariableReauthentication = -1; /* RandomVariableReauthentication */ +static int hf_ansi_map_mobileStationMIN = -1; /* MobileStationMIN */ +static int hf_ansi_map_mscid = -1; /* MSCID */ +static int hf_ansi_map_randomVariableSSD = -1; /* RandomVariableSSD */ +static int hf_ansi_map_randomVariableUniqueChallenge = -1; /* RandomVariableUniqueChallenge */ +static int hf_ansi_map_routingDigits = -1; /* RoutingDigits */ +static int hf_ansi_map_senderIdentificationNumber = -1; /* SenderIdentificationNumber */ +static int hf_ansi_map_sharedSecretData = -1; /* SharedSecretData */ +static int hf_ansi_map_signalingMessageEncryptionKey = -1; /* SignalingMessageEncryptionKey */ +static int hf_ansi_map_ssdnotShared = -1; /* SSDNotShared */ +static int hf_ansi_map_updateCount = -1; /* UpdateCount */ +static int hf_ansi_map_interMSCCircuitID = -1; /* InterMSCCircuitID */ +static int hf_ansi_map_mobileIdentificationNumber = -1; /* MobileIdentificationNumber */ +static int hf_ansi_map_countUpdateReport = -1; /* CountUpdateReport */ +static int hf_ansi_map_uniqueChallengeReport = -1; /* UniqueChallengeReport */ +static int hf_ansi_map_reportType = -1; /* ReportType */ +static int hf_ansi_map_systemAccessType = -1; /* SystemAccessType */ +static int hf_ansi_map_systemCapabilities = -1; /* SystemCapabilities */ +static int hf_ansi_map_callHistoryCountExpected = -1; /* CallHistoryCountExpected */ +static int hf_ansi_map_reportType2 = -1; /* ReportType */ +static int hf_ansi_map_terminalType = -1; /* TerminalType */ +static int hf_ansi_map_authenticationData = -1; /* AuthenticationData */ +static int hf_ansi_map_authenticationResponse = -1; /* AuthenticationResponse */ +static int hf_ansi_map_cdmaNetworkIdentification = -1; /* CDMANetworkIdentification */ +static int hf_ansi_map_confidentialityModes = -1; /* ConfidentialityModes */ +static int hf_ansi_map_controlChannelMode = -1; /* ControlChannelMode */ +static int hf_ansi_map_digits = -1; /* Digits */ +static int hf_ansi_map_pc_ssn = -1; /* PC_SSN */ +static int hf_ansi_map_randomVariable = -1; /* RandomVariable */ +static int hf_ansi_map_serviceRedirectionCause = -1; /* ServiceRedirectionCause */ +static int hf_ansi_map_suspiciousAccess = -1; /* SuspiciousAccess */ +static int hf_ansi_map_transactionCapability = -1; /* TransactionCapability */ +static int hf_ansi_map_analogRedirectRecord = -1; /* AnalogRedirectRecord */ +static int hf_ansi_map_cdmaRedirectRecord = -1; /* CDMARedirectRecord */ +static int hf_ansi_map_dataKey = -1; /* DataKey */ +static int hf_ansi_map_roamingIndication = -1; /* RoamingIndication */ +static int hf_ansi_map_serviceRedirectionInfo = -1; /* ServiceRedirectionInfo */ +static int hf_ansi_map_voicePrivacyMask = -1; /* VoicePrivacyMask */ +static int hf_ansi_map_reauthenticationReport = -1; /* ReauthenticationReport */ +static int hf_ansi_map_serviceIndicator = -1; /* ServiceIndicator */ +static int hf_ansi_map_signalingMessageEncryptionReport = -1; /* SignalingMessageEncryptionReport */ +static int hf_ansi_map_ssdUpdateReport = -1; /* SSDUpdateReport */ +static int hf_ansi_map_voicePrivacyReport = -1; /* VoicePrivacyReport */ +static int hf_ansi_map_randomVariableBaseStation = -1; /* RandomVariableBaseStation */ +static int hf_ansi_map_authenticationResponseBaseStation = -1; /* AuthenticationResponseBaseStation */ +static int hf_ansi_map_billingID = -1; /* BillingID */ +static int hf_ansi_map_channelData = -1; /* ChannelData */ +static int hf_ansi_map_interSwitchCount = -1; /* InterSwitchCount */ +static int hf_ansi_map_servingCellID = -1; /* ServingCellID */ +static int hf_ansi_map_stationClassMark = -1; /* StationClassMark */ +static int hf_ansi_map_targetCellID = -1; /* TargetCellID */ +static int hf_ansi_map_handoffReason = -1; /* HandoffReason */ +static int hf_ansi_map_handoffState = -1; /* HandoffState */ +static int hf_ansi_map_tdmaBurstIndicator = -1; /* TDMABurstIndicator */ +static int hf_ansi_map_tdmaCallMode = -1; /* TDMACallMode */ +static int hf_ansi_map_tdmaChannelData = -1; /* TDMAChannelData */ +static int hf_ansi_map_baseStationManufacturerCode = -1; /* BaseStationManufacturerCode */ +static int hf_ansi_map_alertCode = -1; /* AlertCode */ +static int hf_ansi_map_cdma2000HandoffInvokeIOSData = -1; /* CDMA2000HandoffInvokeIOSData */ +static int hf_ansi_map_cdmaCallMode = -1; /* CDMACallMode */ +static int hf_ansi_map_cdmaChannelData = -1; /* CDMAChannelData */ +static int hf_ansi_map_cdmaConnectionReferenceList = -1; /* CDMAConnectionReferenceList */ +static int hf_ansi_map_cdmaMobileProtocolRevision = -1; /* CDMAMobileProtocolRevision */ +static int hf_ansi_map_cdmaMSMeasuredChannelIdentity = -1; /* CDMAMSMeasuredChannelIdentity */ +static int hf_ansi_map_cdmaServiceConfigurationRecord = -1; /* CDMAServiceConfigurationRecord */ +static int hf_ansi_map_cdmaServiceOptionList = -1; /* CDMAServiceOptionList */ +static int hf_ansi_map_cdmaServingOneWayDelay = -1; /* CDMAServingOneWayDelay */ +static int hf_ansi_map_cdmaStationClassMark = -1; /* CDMAStationClassMark */ +static int hf_ansi_map_cdmaStationClassMark2 = -1; /* CDMAStationClassMark2 */ +static int hf_ansi_map_cdmaTargetMAHOList = -1; /* CDMATargetMAHOList */ +static int hf_ansi_map_cdmaTargetMeasurementList = -1; /* CDMATargetMeasurementList */ +static int hf_ansi_map_dataPrivacyParameters = -1; /* DataPrivacyParameters */ +static int hf_ansi_map_ilspInformation = -1; /* ISLPInformation */ +static int hf_ansi_map_msLocation = -1; /* MSLocation */ +static int hf_ansi_map_nampsCallMode = -1; /* NAMPSCallMode */ +static int hf_ansi_map_nampsChannelData = -1; /* NAMPSChannelData */ +static int hf_ansi_map_nonPublicData = -1; /* NonPublicData */ +static int hf_ansi_map_pdsnAddress = -1; /* PDSNAddress */ +static int hf_ansi_map_pdsnProtocolType = -1; /* PDSNProtocolType */ +static int hf_ansi_map_qosPriority = -1; /* QoSPriority */ +static int hf_ansi_map_systemOperatorCode = -1; /* SystemOperatorCode */ +static int hf_ansi_map_tdmaBandwidth = -1; /* TDMABandwidth */ +static int hf_ansi_map_tdmaServiceCode = -1; /* TDMAServiceCode */ +static int hf_ansi_map_tdmaTerminalCapability = -1; /* TDMATerminalCapability */ +static int hf_ansi_map_tdmaVoiceCoder = -1; /* TDMAVoiceCoder */ +static int hf_ansi_map_userZoneData = -1; /* UserZoneData */ +static int hf_ansi_map_bsmcstatus = -1; /* BSMCStatus */ +static int hf_ansi_map_cdma2000HandoffResponseIOSData = -1; /* CDMA2000HandoffResponseIOSData */ +static int hf_ansi_map_cdmaCodeChannelList = -1; /* CDMACodeChannelList */ +static int hf_ansi_map_cdmaSearchParameters = -1; /* CDMASearchParameters */ +static int hf_ansi_map_cdmaSearchWindow = -1; /* CDMASearchWindow */ +static int hf_ansi_map_sOCStatus = -1; /* SOCStatus */ +static int hf_ansi_map_releaseReason = -1; /* ReleaseReason */ +static int hf_ansi_map_acgencountered = -1; /* ACGEncountered */ +static int hf_ansi_map_callingPartyName = -1; /* CallingPartyName */ +static int hf_ansi_map_callingPartyNumberDigits1 = -1; /* CallingPartyNumberDigits1 */ +static int hf_ansi_map_callingPartyNumberDigits2 = -1; /* CallingPartyNumberDigits2 */ +static int hf_ansi_map_callingPartySubaddress = -1; /* CallingPartySubaddress */ +static int hf_ansi_map_conferenceCallingIndicator = -1; /* ConferenceCallingIndicator */ +static int hf_ansi_map_mobileDirectoryNumber = -1; /* MobileDirectoryNumber */ +static int hf_ansi_map_mSCIdentificationNumber = -1; /* MSCIdentificationNumber */ +static int hf_ansi_map_oneTimeFeatureIndicator = -1; /* OneTimeFeatureIndicator */ +static int hf_ansi_map_featureResult = -1; /* FeatureResult */ +static int hf_ansi_map_accessDeniedReason = -1; /* AccessDeniedReason */ +static int hf_ansi_map_actionCode = -1; /* ActionCode */ +static int hf_ansi_map_announcementList = -1; /* AnnouncementList */ +static int hf_ansi_map_callingPartyNumberString1 = -1; /* CallingPartyNumberString1 */ +static int hf_ansi_map_callingPartyNumberString2 = -1; /* CallingPartyNumberString2 */ +static int hf_ansi_map_digits_Destination = -1; /* Digits */ +static int hf_ansi_map_displayText = -1; /* DisplayText */ +static int hf_ansi_map_displayText2 = -1; /* DisplayText2 */ +static int hf_ansi_map_dmh_AccountCodeDigits = -1; /* DMH_AccountCodeDigits */ +static int hf_ansi_map_dmh_AlternateBillingDigits = -1; /* DMH_AlternateBillingDigits */ +static int hf_ansi_map_dmh_BillingDigits = -1; /* DMH_BillingDigits */ +static int hf_ansi_map_dmh_RedirectionIndicator = -1; /* DMH_RedirectionIndicator */ +static int hf_ansi_map_groupInformation = -1; /* GroupInformation */ +static int hf_ansi_map_noAnswerTime = -1; /* NoAnswerTime */ +static int hf_ansi_map_pACAIndicator = -1; /* PACAIndicator */ +static int hf_ansi_map_pilotNumber = -1; /* PilotNumber */ +static int hf_ansi_map_preferredLanguageIndicator = -1; /* PreferredLanguageIndicator */ +static int hf_ansi_map_redirectingNumberDigits = -1; /* RedirectingNumberDigits */ +static int hf_ansi_map_redirectingNumberString = -1; /* RedirectingNumberString */ +static int hf_ansi_map_redirectingSubaddress = -1; /* RedirectingSubaddress */ +static int hf_ansi_map_resumePIC = -1; /* ResumePIC */ +static int hf_ansi_map_terminationList = -1; /* TerminationList */ +static int hf_ansi_map_terminationTriggers = -1; /* TerminationTriggers */ +static int hf_ansi_map_triggerAddressList = -1; /* TriggerAddressList */ +static int hf_ansi_map_targetCellIDList = -1; /* TargetCellIDList */ +static int hf_ansi_map_signalQuality = -1; /* SignalQuality */ +static int hf_ansi_map_targetMeasurementList = -1; /* TargetMeasurementList */ +static int hf_ansi_map_alertResult = -1; /* AlertResult */ +static int hf_ansi_map_messageWaitingNotificationCount = -1; /* MessageWaitingNotificationCount */ +static int hf_ansi_map_messageWaitingNotificationType = -1; /* MessageWaitingNotificationType */ +static int hf_ansi_map_cdmaBandClass = -1; /* CDMABandClass */ +static int hf_ansi_map_cdmaServiceOption = -1; /* CDMAServiceOption */ +static int hf_ansi_map_cdmaSlotCycleIndex = -1; /* CDMASlotCycleIndex */ +static int hf_ansi_map_extendedMSCID = -1; /* ExtendedMSCID */ +static int hf_ansi_map_extendedSystemMyTypeCode = -1; /* ExtendedSystemMyTypeCode */ +static int hf_ansi_map_imsi = -1; /* IMSI */ +static int hf_ansi_map_legInformation = -1; /* LegInformation */ +static int hf_ansi_map_mSIDUsage = -1; /* MSIDUsage */ +static int hf_ansi_map_networkTMSI = -1; /* NetworkTMSI */ +static int hf_ansi_map_pageCount = -1; /* PageCount */ +static int hf_ansi_map_pageIndicator = -1; /* PageIndicator */ +static int hf_ansi_map_pageResponseTime = -1; /* PageResponseTime */ +static int hf_ansi_map_pilotBillingID = -1; /* PilotBillingID */ +static int hf_ansi_map_redirectingPartyName = -1; /* RedirectingPartyName */ +static int hf_ansi_map_systemMyTypeCode = -1; /* SystemMyTypeCode */ +static int hf_ansi_map_tdmaDataFeaturesIndicator = -1; /* TDMADataFeaturesIndicator */ +static int hf_ansi_map_terminationTreatment = -1; /* TerminationTreatment */ +static int hf_ansi_map_conditionallyDeniedReason = -1; /* ConditionallyDeniedReason */ +static int hf_ansi_map_pagingFrameClass = -1; /* PagingFrameClass */ +static int hf_ansi_map_pSID_RSIDList = -1; /* PSID_RSIDList */ +static int hf_ansi_map_randc = -1; /* RANDC */ +static int hf_ansi_map_tdmaDataMode = -1; /* TDMADataMode */ +static int hf_ansi_map_changeServiceAttributes = -1; /* ChangeServiceAttributes */ +static int hf_ansi_map_edirectingSubaddress = -1; /* RedirectingSubaddress */ +static int hf_ansi_map_setupResult = -1; /* SetupResult */ +static int hf_ansi_map_terminationAccessType = -1; /* TerminationAccessType */ +static int hf_ansi_map_triggerType = -1; /* TriggerType */ +static int hf_ansi_map_winCapability = -1; /* WINCapability */ +static int hf_ansi_map_callingPartyCategory = -1; /* CallingPartyCategory */ +static int hf_ansi_map_controlNetworkID = -1; /* ControlNetworkID */ +static int hf_ansi_map_digits_carrier = -1; /* Digits */ +static int hf_ansi_map_digits_dest = -1; /* Digits */ +static int hf_ansi_map_dmh_ServiceID = -1; /* DMH_ServiceID */ +static int hf_ansi_map_edirectingNumberDigits = -1; /* RedirectingNumberDigits */ +static int hf_ansi_map_lectronicSerialNumber = -1; /* ElectronicSerialNumber */ +static int hf_ansi_map_deregistrationType = -1; /* DeregistrationType */ +static int hf_ansi_map_servicesResult = -1; /* ServicesResult */ +static int hf_ansi_map_sms_MessageWaitingIndicator = -1; /* SMS_MessageWaitingIndicator */ +static int hf_ansi_map_originationTriggers = -1; /* OriginationTriggers */ +static int hf_ansi_map_featureIndicator = -1; /* FeatureIndicator */ +static int hf_ansi_map_dmh_ChargeInformation = -1; /* DMH_ChargeInformation */ +static int hf_ansi_map_qualificationInformationCode = -1; /* QualificationInformationCode */ +static int hf_ansi_map_authorizationDenied = -1; /* AuthorizationDenied */ +static int hf_ansi_map_authorizationPeriod = -1; /* AuthorizationPeriod */ +static int hf_ansi_map_deniedAuthorizationPeriod = -1; /* DeniedAuthorizationPeriod */ +static int hf_ansi_map_randValidTime = -1; /* RANDValidTime */ +static int hf_ansi_map_redirectionReason = -1; /* RedirectionReason */ +static int hf_ansi_map_cancellationType = -1; /* CancellationType */ +static int hf_ansi_map_controlChannelData = -1; /* ControlChannelData */ +static int hf_ansi_map_receivedSignalQuality = -1; /* ReceivedSignalQuality */ +static int hf_ansi_map_systemAccessData = -1; /* SystemAccessData */ +static int hf_ansi_map_cancellationDenied = -1; /* CancellationDenied */ +static int hf_ansi_map_availabilityType = -1; /* AvailabilityType */ +static int hf_ansi_map_borderCellAccess = -1; /* BorderCellAccess */ +static int hf_ansi_map_msc_Address = -1; /* MSC_Address */ +static int hf_ansi_map_sms_Address = -1; /* SMS_Address */ +static int hf_ansi_map_digits_Carrier = -1; /* Digits */ +static int hf_ansi_map_authenticationCapability = -1; /* AuthenticationCapability */ +static int hf_ansi_map_callingFeaturesIndicator = -1; /* CallingFeaturesIndicator */ +static int hf_ansi_map_geographicAuthorization = -1; /* GeographicAuthorization */ +static int hf_ansi_map_originationIndicator = -1; /* OriginationIndicator */ +static int hf_ansi_map_restrictionDigits = -1; /* RestrictionDigits */ +static int hf_ansi_map_sms_OriginationRestrictions = -1; /* SMS_OriginationRestrictions */ +static int hf_ansi_map_sms_TerminationRestrictions = -1; /* SMS_TerminationRestrictions */ +static int hf_ansi_map_spinipin = -1; /* SPINIPIN */ +static int hf_ansi_map_spiniTriggers = -1; /* SPINITriggers */ +static int hf_ansi_map_terminationRestrictionCode = -1; /* TerminationRestrictionCode */ +static int hf_ansi_map_digitCollectionControl = -1; /* DigitCollectionControl */ +static int hf_ansi_map_trunkStatus = -1; /* TrunkStatus */ +static int hf_ansi_map_userGroup = -1; /* UserGroup */ +static int hf_ansi_map_voiceMailboxNumber = -1; /* VoiceMailboxNumber */ +static int hf_ansi_map_voiceMailboxPIN = -1; /* VoiceMailboxPIN */ +static int hf_ansi_map_sms_BearerData = -1; /* SMS_BearerData */ +static int hf_ansi_map_sms_TeleserviceIdentifier = -1; /* SMS_TeleserviceIdentifier */ +static int hf_ansi_map_sms_ChargeIndicator = -1; /* SMS_ChargeIndicator */ +static int hf_ansi_map_sms_DestinationAddress = -1; /* SMS_DestinationAddress */ +static int hf_ansi_map_sms_OriginalDestinationAddress = -1; /* SMS_OriginalDestinationAddress */ +static int hf_ansi_map_sms_OriginalDestinationSubaddress = -1; /* SMS_OriginalDestinationSubaddress */ +static int hf_ansi_map_sms_OriginalOriginatingAddress = -1; /* SMS_OriginalOriginatingAddress */ +static int hf_ansi_map_sms_OriginalOriginatingSubaddress = -1; /* SMS_OriginalOriginatingSubaddress */ +static int hf_ansi_map_sms_OriginatingAddress = -1; /* SMS_OriginatingAddress */ +static int hf_ansi_map_sms_CauseCode = -1; /* SMS_CauseCode */ +static int hf_ansi_map_interMessageTime = -1; /* InterMessageTime */ +static int hf_ansi_map_newlyAssignedMIN = -1; /* NewlyAssignedMIN */ +static int hf_ansi_map_newlyAssignedIMSI = -1; /* NewlyAssignedIMSI */ +static int hf_ansi_map_newMINExtension = -1; /* NewMINExtension */ +static int hf_ansi_map_sms_MessageCount = -1; /* SMS_MessageCount */ +static int hf_ansi_map_sms_NotificationIndicator = -1; /* SMS_NotificationIndicator */ +static int hf_ansi_map_temporaryReferenceNumber = -1; /* TemporaryReferenceNumber */ +static int hf_ansi_map_mobileStationMSID = -1; /* MobileStationMSID */ +static int hf_ansi_map_sms_AccessDeniedReason = -1; /* SMS_AccessDeniedReason */ +static int hf_ansi_map_seizureType = -1; /* SeizureType */ +static int hf_ansi_map_requiredParametersMask = -1; /* RequiredParametersMask */ +static int hf_ansi_map_reasonList = -1; /* ReasonList */ +static int hf_ansi_map_networkTMSIExpirationTime = -1; /* NetworkTMSIExpirationTime */ +static int hf_ansi_map_newNetworkTMSI = -1; /* NewNetworkTMSI */ +static int hf_ansi_map_serviceID = -1; /* ServiceID */ +static int hf_ansi_map_dataAccessElementList = -1; /* DataAccessElementList */ +static int hf_ansi_map_timeDateOffset = -1; /* TimeDateOffset */ +static int hf_ansi_map_timeOfDay = -1; /* TimeOfDay */ +static int hf_ansi_map_dmd_BillingIndicator = -1; /* DMH_BillingIndicator */ +static int hf_ansi_map_failureType = -1; /* FailureType */ +static int hf_ansi_map_failureCause = -1; /* FailureCause */ +static int hf_ansi_map_outingDigits = -1; /* RoutingDigits */ +static int hf_ansi_map_databaseKey = -1; /* DatabaseKey */ +static int hf_ansi_map_modificationRequestList = -1; /* ModificationRequestList */ +static int hf_ansi_map_modificationResultList = -1; /* ModificationResultList */ +static int hf_ansi_map_serviceDataAccessElementList = -1; /* ServiceDataAccessElementList */ +static int hf_ansi_map_privateSpecializedResource = -1; /* PrivateSpecializedResource */ +static int hf_ansi_map_specializedResource = -1; /* SpecializedResource */ +static int hf_ansi_map_executeScript = -1; /* ExecuteScript */ +static int hf_ansi_map_scriptResult = -1; /* ScriptResult */ +static int hf_ansi_map_tdmaVoiceMode = -1; /* TDMAVoiceMode */ +static int hf_ansi_map_callStatus = -1; /* CallStatus */ +static int hf_ansi_map_releaseCause = -1; /* ReleaseCause */ +static int hf_ansi_map_callRecoveryIDList = -1; /* CallRecoveryIDList */ +static int hf_ansi_map_positionInformationCode = -1; /* PositionInformationCode */ +static int hf_ansi_map_mSStatus = -1; /* MSStatus */ +static int hf_ansi_map_pSID_RSIDInformation = -1; /* PSID_RSIDInformation */ +static int hf_ansi_map_controlType = -1; /* ControlType */ +static int hf_ansi_map_destinationAddress = -1; /* DestinationAddress */ +static int hf_ansi_map_gapDuration = -1; /* GapDuration */ +static int hf_ansi_map_gapInterval = -1; /* GapInterval */ +static int hf_ansi_map_invokingNEType = -1; /* InvokingNEType */ +static int hf_ansi_map_range = -1; /* Range */ +static int hf_ansi_map_ctionCode = -1; /* ActionCode */ +static int hf_ansi_map_aKeyProtocolVersion = -1; /* AKeyProtocolVersion */ +static int hf_ansi_map_mobileStationPartialKey = -1; /* MobileStationPartialKey */ +static int hf_ansi_map_newlyAssignedMSID = -1; /* NewlyAssignedMSID */ +static int hf_ansi_map_baseStationPartialKey = -1; /* BaseStationPartialKey */ +static int hf_ansi_map_modulusValue = -1; /* ModulusValue */ +static int hf_ansi_map_otasp_ResultCode = -1; /* OTASP_ResultCode */ +static int hf_ansi_map_primitiveValue = -1; /* PrimitiveValue */ +static int hf_ansi_map_announcementCode1 = -1; /* AnnouncementCode */ +static int hf_ansi_map_announcementCode2 = -1; /* AnnouncementCode */ +static int hf_ansi_map_cdmaCodeChannel = -1; /* CDMACodeChannel */ +static int hf_ansi_map_cdmaPilotPN = -1; /* CDMAPilotPN */ +static int hf_ansi_map_cdmaPowerCombinedIndicator = -1; /* CDMAPowerCombinedIndicator */ +static int hf_ansi_map_CDMACodeChannelList_item = -1; /* CDMACodeChannelInformation */ +static int hf_ansi_map_cdmaPilotStrength = -1; /* CDMAPilotStrength */ +static int hf_ansi_map_cdmaTargetOneWayDelay = -1; /* CDMATargetOneWayDelay */ +static int hf_ansi_map_CDMATargetMAHOList_item = -1; /* CDMATargetMAHOInformation */ +static int hf_ansi_map_cdmaSignalQuality = -1; /* CDMASignalQuality */ +static int hf_ansi_map_CDMATargetMeasurementList_item = -1; /* CDMATargetMeasurementInformation */ +static int hf_ansi_map_TargetMeasurementList_item = -1; /* TargetMeasurementInformation */ +static int hf_ansi_map_TerminationList_item = -1; /* TerminationList_item */ +static int hf_ansi_map_intersystemTermination = -1; /* IntersystemTermination */ +static int hf_ansi_map_localTermination = -1; /* LocalTermination */ +static int hf_ansi_map_pstnTermination = -1; /* PSTNTermination */ +static int hf_ansi_map_CDMAServiceOptionList_item = -1; /* CDMAServiceOptionList_item */ +static int hf_ansi_map_cdmaServiceOption2 = -1; /* CDMAServiceOption */ +static int hf_ansi_map_pSID_RSIDInformation1 = -1; /* PSID_RSIDInformation */ +static int hf_ansi_map_targetCellID1 = -1; /* TargetCellID */ +static int hf_ansi_map_cdmaConnectionReference = -1; /* CDMAConnectionReference */ +static int hf_ansi_map_cdmaState = -1; /* CDMAState */ +static int hf_ansi_map_cdmaServiceOptionConnectionIdentifier = -1; /* CDMAServiceOptionConnectionIdentifier */ +static int hf_ansi_map_CDMAConnectionReferenceList_item = -1; /* CDMAConnectionReferenceList_item */ +static int hf_ansi_map_cdmaConnectionReferenceInformation = -1; /* CDMAConnectionReferenceInformation */ +static int hf_ansi_map_cdmaConnectionReferenceInformation2 = -1; /* CDMAConnectionReferenceInformation */ +static int hf_ansi_map_analogRedirectInfo = -1; /* AnalogRedirectInfo */ +static int hf_ansi_map_CDMAChannelNumberList_item = -1; /* CDMAChannelNumberList_item */ +static int hf_ansi_map_cdmaChannelNumber = -1; /* CDMAChannelNumber */ +static int hf_ansi_map_cdmaChannelNumber2 = -1; /* CDMAChannelNumber */ +static int hf_ansi_map_cdmaChannelNumberList = -1; /* CDMAChannelNumberList */ +static int hf_ansi_map_dataID = -1; /* DataID */ +static int hf_ansi_map_change = -1; /* Change */ +static int hf_ansi_map_dataValue = -1; /* DataValue */ +static int hf_ansi_map_DataAccessElementList_item = -1; /* DataAccessElementList_item */ +static int hf_ansi_map_dataAccessElement1 = -1; /* DataAccessElement */ +static int hf_ansi_map_dataAccessElement2 = -1; /* DataAccessElement */ +static int hf_ansi_map_dataResult = -1; /* DataResult */ +static int hf_ansi_map_DataUpdateResultList_item = -1; /* DataUpdateResult */ +static int hf_ansi_map_globalTitle = -1; /* GlobalTitle */ +static int hf_ansi_map_pC_SSN = -1; /* PC_SSN */ +static int hf_ansi_map_scriptName = -1; /* ScriptName */ +static int hf_ansi_map_scriptArgument = -1; /* ScriptArgument */ +static int hf_ansi_map_allOrNone = -1; /* AllOrNone */ +static int hf_ansi_map_ModificationRequestList_item = -1; /* ModificationRequest */ +static int hf_ansi_map_serviceDataResultList = -1; /* ServiceDataResultList */ +static int hf_ansi_map_ModificationResultList_item = -1; /* ModificationResult */ +static int hf_ansi_map_ServiceDataAccessElementList_item = -1; /* ServiceDataAccessElement */ +static int hf_ansi_map_dataUpdateResultList = -1; /* DataUpdateResultList */ +static int hf_ansi_map_ServiceDataResultList_item = -1; /* ServiceDataResult */ +static int hf_ansi_map_TriggerAddressList_item = -1; /* TriggerAddressList_item */ +static int hf_ansi_map_triggerList = -1; /* TriggerList */ +static int hf_ansi_map_triggerListOpt = -1; /* TriggerList */ +static int hf_ansi_map_wIN_TriggerList = -1; /* WIN_TriggerList */ +static int hf_ansi_map_triggerCapability = -1; /* TriggerCapability */ +static int hf_ansi_map_wINOperationsCapability = -1; /* WINOperationsCapability */ +static int hf_ansi_map_detectionPointType = -1; /* DetectionPointType */ +static int hf_ansi_map_WIN_TriggerList_item = -1; /* WIN_Trigger */ +static int hf_ansi_map_CallRecoveryIDList_item = -1; /* CallRecoveryID */ +static int hf_ansi_map_sCFOverloadGapInterval = -1; /* SCFOverloadGapInterval */ +static int hf_ansi_map_serviceManagementSystemGapInterval = -1; /* ServiceManagementSystemGapInterval */ +static int hf_ansi_map_mobileStationIMSI = -1; /* MobileStationIMSI */ + +/*--- End of included file: packet-ansi_map-hf.c ---*/ +#line 298 "packet-ansi_map-template.c" -static const gchar * -my_match_strval_idx(guint32 val, const ext_value_string_t *vs, gint *idx) -{ - gint i = 0; +/* Initialize the subtree pointers */ +static gint ett_ansi_map = -1; +static gint ett_mintype = -1; +static gint ett_digitstype = -1; +static gint ett_billingid = -1; +static gint ett_mscid = -1; +static gint ett_originationtriggers = -1; +static gint ett_transactioncapability = -1; +static gint ett_systemcapabilities = -1; + + +/*--- Included file: packet-ansi_map-ett.c ---*/ +#line 1 "packet-ansi_map-ett.c" +static gint ett_ansi_map_ComponentPDU = -1; +static gint ett_ansi_map_InvokePDU = -1; +static gint ett_ansi_map_ReturnResultPDU = -1; +static gint ett_ansi_map_ReturnErrorPDU = -1; +static gint ett_ansi_map_RejectPDU = -1; +static gint ett_ansi_map_OperationCode = -1; +static gint ett_ansi_map_ErrorCode = -1; +static gint ett_ansi_map_AuthenticationDirective = -1; +static gint ett_ansi_map_AuthenticationDirectiveRes = -1; +static gint ett_ansi_map_AuthenticationDirectiveForward = -1; +static gint ett_ansi_map_AuthenticationDirectiveForwardRes = -1; +static gint ett_ansi_map_AuthenticationFailureReport = -1; +static gint ett_ansi_map_AuthenticationFailureReportRes = -1; +static gint ett_ansi_map_AuthenticationRequest = -1; +static gint ett_ansi_map_AuthenticationRequestRes = -1; +static gint ett_ansi_map_AuthenticationStatusReport = -1; +static gint ett_ansi_map_AuthenticationStatusReportRes = -1; +static gint ett_ansi_map_BaseStationChallenge = -1; +static gint ett_ansi_map_BaseStationChallengeRes = -1; +static gint ett_ansi_map_Blocking = -1; +static gint ett_ansi_map_BulkDeregistration = -1; +static gint ett_ansi_map_CountRequest = -1; +static gint ett_ansi_map_CountRequestRes = -1; +static gint ett_ansi_map_FacilitiesDirective = -1; +static gint ett_ansi_map_FacilitiesDirectiveRes = -1; +static gint ett_ansi_map_FacilitiesDirective2 = -1; +static gint ett_ansi_map_FacilitiesDirective2Res = -1; +static gint ett_ansi_map_FacilitiesRelease = -1; +static gint ett_ansi_map_FacilitiesReleaseRes = -1; +static gint ett_ansi_map_FeatureRequest = -1; +static gint ett_ansi_map_FeatureRequestRes = -1; +static gint ett_ansi_map_FlashRequest = -1; +static gint ett_ansi_map_HandoffBack = -1; +static gint ett_ansi_map_HandoffBackRes = -1; +static gint ett_ansi_map_HandoffBack2 = -1; +static gint ett_ansi_map_HandoffBack2Res = -1; +static gint ett_ansi_map_HandoffMeasurementRequest = -1; +static gint ett_ansi_map_HandoffMeasurementRequestRes = -1; +static gint ett_ansi_map_HandoffMeasurementRequest2 = -1; +static gint ett_ansi_map_HandoffMeasurementRequest2Res = -1; +static gint ett_ansi_map_HandoffToThird = -1; +static gint ett_ansi_map_HandoffToThirdRes = -1; +static gint ett_ansi_map_HandoffToThird2 = -1; +static gint ett_ansi_map_HandoffToThird2Res = -1; +static gint ett_ansi_map_InformationDirective = -1; +static gint ett_ansi_map_InformationDirectiveRes = -1; +static gint ett_ansi_map_InformationForward = -1; +static gint ett_ansi_map_InformationForwardRes = -1; +static gint ett_ansi_map_InterSystemAnswer = -1; +static gint ett_ansi_map_InterSystemPage = -1; +static gint ett_ansi_map_InterSystemPageRes = -1; +static gint ett_ansi_map_InterSystemPage2 = -1; +static gint ett_ansi_map_InterSystemPage2Res = -1; +static gint ett_ansi_map_InterSystemSetup = -1; +static gint ett_ansi_map_InterSystemSetupRes = -1; +static gint ett_ansi_map_LocationRequest = -1; +static gint ett_ansi_map_LocationRequestRes = -1; +static gint ett_ansi_map_MSInactive = -1; +static gint ett_ansi_map_OriginationRequest = -1; +static gint ett_ansi_map_OriginationRequestRes = -1; +static gint ett_ansi_map_QualificationDirective = -1; +static gint ett_ansi_map_QualificationRequest = -1; +static gint ett_ansi_map_QualificationRequestRes = -1; +static gint ett_ansi_map_RandomVariableRequest = -1; +static gint ett_ansi_map_RandomVariableRequestRes = -1; +static gint ett_ansi_map_RedirectionDirective = -1; +static gint ett_ansi_map_RedirectionRequest = -1; +static gint ett_ansi_map_RegistrationCancellation = -1; +static gint ett_ansi_map_RegistrationCancellationRes = -1; +static gint ett_ansi_map_RegistrationNotification = -1; +static gint ett_ansi_map_RegistrationNotificationRes = -1; +static gint ett_ansi_map_RemoteUserInteractionDirective = -1; +static gint ett_ansi_map_RemoteUserInteractionDirectiveRes = -1; +static gint ett_ansi_map_ResetCircuit = -1; +static gint ett_ansi_map_ResetCircuitRes = -1; +static gint ett_ansi_map_RoutingRequest = -1; +static gint ett_ansi_map_RoutingRequestRes = -1; +static gint ett_ansi_map_SMSDeliveryBackward = -1; +static gint ett_ansi_map_SMSDeliveryBackwardRes = -1; +static gint ett_ansi_map_SMSDeliveryForward = -1; +static gint ett_ansi_map_SMSDeliveryForwardRes = -1; +static gint ett_ansi_map_SMSDeliveryPointToPoint = -1; +static gint ett_ansi_map_SMSDeliveryPointToPointRes = -1; +static gint ett_ansi_map_SMSNotification = -1; +static gint ett_ansi_map_SMSNotificationRes = -1; +static gint ett_ansi_map_SMSRequest = -1; +static gint ett_ansi_map_SMSRequestRes = -1; +static gint ett_ansi_map_TransferToNumberRequest = -1; +static gint ett_ansi_map_TransferToNumberRequestRes = -1; +static gint ett_ansi_map_TrunkTest = -1; +static gint ett_ansi_map_TrunkTestDisconnect = -1; +static gint ett_ansi_map_Unblocking = -1; +static gint ett_ansi_map_UnreliableRoamerDataDirective = -1; +static gint ett_ansi_map_UnsolicitedResponse = -1; +static gint ett_ansi_map_UnsolicitedResponseRes = -1; +static gint ett_ansi_map_ParameterRequest = -1; +static gint ett_ansi_map_ParameterRequestRes = -1; +static gint ett_ansi_map_TMSIDirective = -1; +static gint ett_ansi_map_TMSIDirectiveRes = -1; +static gint ett_ansi_map_NumberPortabilityRequest = -1; +static gint ett_ansi_map_ServiceRequest = -1; +static gint ett_ansi_map_ServiceRequestRes = -1; +static gint ett_ansi_map_AnalyzedInformation = -1; +static gint ett_ansi_map_AnalyzedInformationRes = -1; +static gint ett_ansi_map_ConnectionFailureReport = -1; +static gint ett_ansi_map_ConnectResource = -1; +static gint ett_ansi_map_FacilitySelectedAndAvailable = -1; +static gint ett_ansi_map_FacilitySelectedAndAvailableRes = -1; +static gint ett_ansi_map_Modify = -1; +static gint ett_ansi_map_ModifyRes = -1; +static gint ett_ansi_map_Search = -1; +static gint ett_ansi_map_SearchRes = -1; +static gint ett_ansi_map_SeizeResource = -1; +static gint ett_ansi_map_SeizeResourceRes = -1; +static gint ett_ansi_map_SRFDirective = -1; +static gint ett_ansi_map_SRFDirectiveRes = -1; +static gint ett_ansi_map_TBusy = -1; +static gint ett_ansi_map_TBusyRes = -1; +static gint ett_ansi_map_TNoAnswer = -1; +static gint ett_ansi_map_TNoAnswerRes = -1; +static gint ett_ansi_map_ChangeFacilities = -1; +static gint ett_ansi_map_ChangeFacilitiesRes = -1; +static gint ett_ansi_map_ChangeService = -1; +static gint ett_ansi_map_ChangeServiceRes = -1; +static gint ett_ansi_map_MessageDirective = -1; +static gint ett_ansi_map_BulkDisconnection = -1; +static gint ett_ansi_map_CallControlDirective = -1; +static gint ett_ansi_map_CallControlDirectiveRes = -1; +static gint ett_ansi_map_OAnswer = -1; +static gint ett_ansi_map_ODisconnect = -1; +static gint ett_ansi_map_ODisconnectRes = -1; +static gint ett_ansi_map_CallRecoveryReport = -1; +static gint ett_ansi_map_TAnswer = -1; +static gint ett_ansi_map_TDisconnect = -1; +static gint ett_ansi_map_TDisconnectRes = -1; +static gint ett_ansi_map_UnreliableCallData = -1; +static gint ett_ansi_map_OCalledPartyBusy = -1; +static gint ett_ansi_map_OCalledPartyBusyRes = -1; +static gint ett_ansi_map_ONoAnswer = -1; +static gint ett_ansi_map_ONoAnswerRes = -1; +static gint ett_ansi_map_PositionRequest = -1; +static gint ett_ansi_map_PositionRequestRes = -1; +static gint ett_ansi_map_PositionRequestForward = -1; +static gint ett_ansi_map_PositionRequestForwardRes = -1; +static gint ett_ansi_map_ACGDirective = -1; +static gint ett_ansi_map_RoamerDatabaseVerificationRequest = -1; +static gint ett_ansi_map_RoamerDatabaseVerificationRequestRes = -1; +static gint ett_ansi_map_AddService = -1; +static gint ett_ansi_map_AddServiceRes = -1; +static gint ett_ansi_map_DropService = -1; +static gint ett_ansi_map_DropServiceRes = -1; +static gint ett_ansi_map_OTASPRequest = -1; +static gint ett_ansi_map_OTASPRequestRes = -1; +static gint ett_ansi_map_AnnouncementList = -1; +static gint ett_ansi_map_CDMACodeChannelInformation = -1; +static gint ett_ansi_map_CDMACodeChannelList = -1; +static gint ett_ansi_map_CDMATargetMAHOInformation = -1; +static gint ett_ansi_map_CDMATargetMAHOList = -1; +static gint ett_ansi_map_CDMATargetMeasurementInformation = -1; +static gint ett_ansi_map_CDMATargetMeasurementList = -1; +static gint ett_ansi_map_IntersystemTermination = -1; +static gint ett_ansi_map_LocalTermination = -1; +static gint ett_ansi_map_Profile = -1; +static gint ett_ansi_map_PSTNTermination = -1; +static gint ett_ansi_map_TargetMeasurementInformation = -1; +static gint ett_ansi_map_TargetMeasurementList = -1; +static gint ett_ansi_map_TerminationList = -1; +static gint ett_ansi_map_TerminationList_item = -1; +static gint ett_ansi_map_CDMAServiceOptionList = -1; +static gint ett_ansi_map_CDMAServiceOptionList_item = -1; +static gint ett_ansi_map_PSID_RSIDList = -1; +static gint ett_ansi_map_TargetCellIDList = -1; +static gint ett_ansi_map_CDMAConnectionReferenceInformation = -1; +static gint ett_ansi_map_CDMAConnectionReferenceList = -1; +static gint ett_ansi_map_CDMAConnectionReferenceList_item = -1; +static gint ett_ansi_map_AnalogRedirectRecord = -1; +static gint ett_ansi_map_CDMAChannelNumberList = -1; +static gint ett_ansi_map_CDMAChannelNumberList_item = -1; +static gint ett_ansi_map_CDMARedirectRecord = -1; +static gint ett_ansi_map_MSID = -1; +static gint ett_ansi_map_DataAccessElement = -1; +static gint ett_ansi_map_DataAccessElementList = -1; +static gint ett_ansi_map_DataAccessElementList_item = -1; +static gint ett_ansi_map_DataUpdateResult = -1; +static gint ett_ansi_map_DataUpdateResultList = -1; +static gint ett_ansi_map_DestinationAddress = -1; +static gint ett_ansi_map_ExecuteScript = -1; +static gint ett_ansi_map_ModificationRequest = -1; +static gint ett_ansi_map_ModificationRequestList = -1; +static gint ett_ansi_map_ModificationResult = -1; +static gint ett_ansi_map_ModificationResultList = -1; +static gint ett_ansi_map_ServiceDataAccessElement = -1; +static gint ett_ansi_map_ServiceDataAccessElementList = -1; +static gint ett_ansi_map_ServiceDataResult = -1; +static gint ett_ansi_map_ServiceDataResultList = -1; +static gint ett_ansi_map_SRFCapability = -1; +static gint ett_ansi_map_TriggerAddressList = -1; +static gint ett_ansi_map_TriggerAddressList_item = -1; +static gint ett_ansi_map_TriggerList = -1; +static gint ett_ansi_map_WINCapability = -1; +static gint ett_ansi_map_WIN_Trigger = -1; +static gint ett_ansi_map_WIN_TriggerList = -1; +static gint ett_ansi_map_CallRecoveryID = -1; +static gint ett_ansi_map_CallRecoveryIDList = -1; +static gint ett_ansi_map_GapInterval = -1; +static gint ett_ansi_map_MobileStationMSID = -1; +static gint ett_ansi_map_NewlyAssignedMSID = -1; + +/*--- End of included file: packet-ansi_map-ett.c ---*/ +#line 310 "packet-ansi_map-template.c" + +/* Global variables */ +static dissector_handle_t data_handle=NULL; +static dissector_table_t is637_tele_id_dissector_table; /* IS-637 Teleservice ID */ +static dissector_table_t is683_dissector_table; /* IS-683-A (OTA) */ +static dissector_table_t is801_dissector_table; /* IS-801 (PLD) */ +static packet_info *g_pinfo; +static proto_tree *g_tree; +tvbuff_t *SMS_BearerData_tvb = NULL; +static gboolean is683_ota; +static gboolean is801_pld; +static gboolean ansi_map_is_invoke; +static guint32 OperationCode; - while (vs[i].strptr) - { - if (vs[i].value == val) - { - *idx = i; - return(vs[i].strptr); +/* Transaction table */ +static GHashTable *TransactionId_table=NULL; + +static void +TransactionId_table_cleanup(gpointer key , gpointer value, gpointer user_data _U_){ + + guint8 *opcode = value; + gchar *TransactionId_str = key; + + if ( TransactionId_str ){ + g_free(TransactionId_str); + } + if (opcode){ + g_free(opcode); } - i++; - } +} - *idx = -1; - return(NULL); -} - -/* ANSI PARAM STRINGS */ -static const value_string ansi_param_1_strings[] = { - { 0x81, "Billing ID" }, - { 0x82, "Serving Cell ID" }, - { 0x83, "Target Cell ID" }, - { 0x84, "Digits" }, - { 0x85, "Channel Data" }, - { 0x86, "Inter MSC Circuit ID" }, - { 0x87, "Inter Switch Count" }, - { 0x88, "Mobile Identification Number" }, - { 0x89, "Electronic Serial Number" }, - { 0x8A, "Release Reason" }, - { 0x8B, "Signal Quality" }, - { 0x8C, "Station Class Mark" }, - { 0x8D, "Authorization Denied" }, - { 0x8E, "Authorization Period" }, - { 0x8F, "Seizure Type" }, - { 0x90, "Trunk Status" }, - { 0x91, "Qualification Information Code" }, - { 0x92, "Feature Result" }, - { 0x93, "Redirection Reason" }, - { 0x94, "Access Denied Reason" }, - { 0x95, "MSCID" }, - { 0x96, "System My Type Code" }, - { 0x97, "Origination Indicator" }, - { 0x98, "Termination Restriction Code" }, - { 0x99, "Calling Features Indicator" }, - { 0x9A, "Faulty Parameter" }, - { 0x9B, "Usage Indicator" }, - { 0x9C, "TDMA Channel Data" }, - { 0x9D, "TDMA Call Mode" }, - { 0x9E, "Handoff Reason" }, - { 0, NULL }, -}; +void +ansi_map_init_transaction_table(void){ -static const value_string ansi_param_2_strings[] = { - { 0x9F1F, "TDMA Burst Indicator" }, - { 0x9F20, "PC_SSN" }, - { 0x9F21, "Location Area ID" }, - { 0x9F22, "System Access Type" }, - { 0x9F23, "Authentication Response" }, - { 0x9F24, "Authentication Response Base Station" }, - { 0x9F25, "Authentication Response Unique Challenge" }, - { 0x9F26, "Call History Count" }, - { 0x9F27, "Confidentiality Modes" }, - { 0x9F28, "Random Variable" }, - { 0x9F29, "Random Variable Base Station" }, - { 0x9F2A, "Random Variable SSD" }, - { 0x9F2B, "Random Variable Unique Challenge" }, - { 0x9F2C, "Report Type" }, - { 0x9F2D, "Signaling Message Encryption Key" }, - { 0x9F2E, "Shared Secret Data" }, - { 0x9F2F, "Terminal Type" }, - { 0x9F30, "Voice Privacy Mask" }, - { 0x9F31, "System Capabilities" }, - { 0x9F32, "Deny Access" }, - { 0x9F33, "Update Count" }, - { 0x9F34, "SSD Not Shared" }, - { 0x9F35, "Extended MSCID" }, - { 0x9F36, "Extended System My Type Code" }, - { 0x9F37, "Control Channel Data" }, - { 0x9F38, "System Access Data" }, - { 0x9F39, "Cancellation Denied" }, - { 0x9F3A, "Border Cell Access" }, - { 0x9F3B, "CDMA Station Class Mark" }, - { 0x9F3C, "CDMA Serving One Way Delay" }, - { 0x9F3D, "CDMA Target One Way Delay" }, - { 0x9F3E, "CDMA Call Mode" }, - { 0x9F3F, "CDMA Channel Data" }, - { 0x9F40, "CDMA Signal Quality" }, - { 0x9F41, "CDMA Pilot Strength" }, - { 0x9F42, "CDMA Mobile Protocol Revision" }, - { 0x9F43, "CDMA Private Long Code Mask" }, - { 0x9F44, "CDMA Code Channel" }, - { 0x9F45, "CDMA Search Window" }, - { 0x9F46, "MS Location" }, - { 0x9F47, "Page Indicator" }, - { 0x9F48, "Received Signal Quality" }, - { 0x9F49, "Deregistration Type" }, - { 0x9F4A, "NAMPS Channel Data" }, - { 0x9F4B, "Alert Code" }, - { 0x9F4C, "Announcement Code" }, - { 0x9F4D, "Authentication Algorithm Version" }, - { 0x9F4E, "Authentication Capability" }, - { 0x9F4F, "Call History Count Expected" }, - { 0x9F50, "Calling Party Number Digits 1" }, - { 0x9F51, "Calling Party Number Digits 2" }, - { 0x9F52, "Calling Party Number String 1" }, - { 0x9F53, "Calling Party Number String 2" }, - { 0x9F54, "Calling Party Subaddress" }, - { 0x9F55, "Cancellation Type" }, - { 0x9F56, "Carrier Digits" }, - { 0x9F57, "Destination Digits" }, - { 0x9F58, "DMH Redirection Indicator" }, - { 0xBF59, "Inter System Termination" }, - { 0x9F5A, "Availability Type" }, - { 0xBF5B, "Local Termination" }, - { 0x9F5C, "Message Waiting Notification Count" }, - { 0x9F5D, "Mobile Directory Number" }, - { 0x9F5E, "MSCID Number" }, - { 0xBF5F, "PSTN Termination" }, - { 0x9F60, "No Answer Time" }, - { 0x9F61, "One Time Feature Indicator" }, - { 0x9F62, "Origination Triggers" }, - { 0x9F63, "RANDC" }, - { 0x9F64, "Redirecting Number Digits" }, - { 0x9F65, "Redirecting Number String" }, - { 0x9F66, "Redirecting Subaddress" }, - { 0x9F67, "Sender Identification Number" }, - { 0x9F68, "SMS Address" }, - { 0x9F69, "SMS Bearer Data" }, - { 0x9F6A, "SMS Charge Indicator" }, - { 0x9F6B, "SMS Destination Address" }, - { 0x9F6C, "SMS Message Count" }, - { 0x9F6D, "SMS Notification Indicator" }, - { 0x9F6E, "SMS Original Destination Address" }, - { 0x9F6F, "SMS Original Destination Subaddress" }, - { 0x9F70, "SMS Original Originating Address" }, - { 0x9F71, "SMS Original Originating Subaddress" }, - { 0x9F72, "SMS Originating Address" }, - { 0x9F73, "SMS Originating Restrictions" }, - { 0x9F74, "SMS Teleservice Identifier" }, - { 0x9F75, "SMS Termination Restrictions" }, - { 0x9F76, "SMS Message Waiting Indicator" }, - { 0x9F77, "Termination Access Type" }, - { 0xBF78, "Termination List" }, - { 0x9F79, "Termination Treatment" }, - { 0x9F7A, "Termination Triggers" }, - { 0x9F7B, "Transaction Capability" }, - { 0x9F7C, "Unique Challenge Report" }, - { 0, NULL }, -}; + /* Destroy any existing memory chunks / hashes. */ + if (TransactionId_table){ + g_hash_table_foreach(TransactionId_table, TransactionId_table_cleanup, NULL); + g_hash_table_destroy(TransactionId_table); + } -static const value_string ansi_param_3_strings[] = { - { 0x9F8100, "Action Code" }, - { 0x9F8101, "Alert Result" }, - { 0xBF8102, "Announcement List" }, - { 0xBF8103, "CDMA Code Channel Information" }, - { 0xBF8104, "CDMA Code Channel List" }, - { 0xBF8105, "CDMA Target Measurement Information" }, - { 0xBF8106, "CDMA Target Measurement List" }, - { 0xBF8107, "CDMA Target MAHO Information" }, - { 0xBF8108, "CDMA Target MAHO List" }, - { 0x9F8109, "Conference Calling Indicator" }, - { 0x9F810A, "Count Update Report" }, - { 0x9F810B, "Digit Collection Control" }, - { 0x9F810C, "DMH Account Code Digits" }, - { 0x9F810D, "DMH Alternate Billing Digits" }, - { 0x9F810E, "DMH Billing Digits" }, - { 0x9F810F, "Geographic Authorization" }, - { 0x9F8110, "Leg Information" }, - { 0x9F8111, "Message Waiting Notification Type" }, - { 0x9F8112, "PACA Indicator" }, - { 0x9F8113, "Preferred Language Indicator" }, - { 0x9F8114, "Random Valid Time" }, - { 0x9F8115, "Restriction Digits" }, - { 0x9F8116, "Routing Digits" }, - { 0x9F8117, "Setup Result" }, - { 0x9F8118, "SMS Access Denied Reason" }, - { 0x9F8119, "SMS Cause Code" }, - { 0x9F811A, "SPINI PIN" }, - { 0x9F811B, "SPINI Triggers" }, - { 0x9F811C, "SSD Update Report" }, - { 0xBF811D, "Target Measurement Information" }, - { 0xBF811E, "Target Measurement List" }, - { 0x9F811F, "Voice Mailbox PIN" }, - { 0x9F8120, "Voice Mailbox Number" }, - { 0x9F8121, "Authentication Data" }, - { 0x9F8122, "Conditionally Denied Reason" }, - { 0x9F8123, "Group Information" }, - { 0x9F8124, "Handoff State" }, - { 0x9F8125, "NAMPS Call Mode" }, - { 0x9F8126, "CDMA Slot Cycle Index" }, - { 0x9F8127, "Denied Authorization Period" }, - { 0x9F8128, "Pilot Number" }, - { 0x9F8129, "Pilot Billing ID" }, - { 0x9F812A, "CDMA Band Class" }, - { 0xBF812B, "CDMA Band Class Information" }, - { 0xBF812C, "CDMA Band Class List" }, - { 0x9F812D, "CDMA Pilot PN" }, - { 0x9F812E, "CDMA Service Configuration Record" }, - { 0x9F812F, "CDMA Service Option" }, - { 0xBF8130, "CDMA Service Option List" }, - { 0x9F8131, "CDMA Station Class Mark 2" }, - { 0x9F8132, "TDMA Service Code" }, - { 0x9F8133, "TDMA Terminal Capability" }, - { 0x9F8134, "TDMA Voice Coder" }, - { 0x9F8135, "A-Key Protocol Version" }, - { 0x9F8136, "Authentication Response Reauthentication" }, - { 0x9F8137, "Base Station Partial Key" }, - { 0x9F8138, "Mobile Station MIN" }, - { 0x9F8139, "Mobile Station Partial Key" }, - { 0x9F813A, "Modulus Value" }, - { 0x9F813B, "Newly Assigned MIN" }, - { 0x9F813D, "OTASP Result Code" }, - { 0x9F813E, "Primitive Value" }, - { 0x9F813F, "Random Variable Reauthentication" }, - { 0x9F8140, "Reauthentication Report" }, - { 0x9F8141, "Service Indicator" }, - { 0x9F8142, "Signaling Message Encryption Report" }, - { 0x9F8143, "Temporary Reference Number" }, - { 0x9F8144, "Voice Privacy Report" }, - { 0x9F8145, "Base Station Manufacturer Code" }, - { 0x9F8146, "BSMC Status" }, - { 0x9F8147, "Control Channel Mode" }, - { 0x9F8148, "Non Public Data" }, - { 0x9F8149, "Paging Frame Class" }, - { 0x9F814A, "PSID RSID Information" }, - { 0xBF814B, "PSID RSID List" }, - { 0x9F814C, "Services Result" }, - { 0x9F814D, "SOC Status" }, - { 0x9F814E, "System Operator Code" }, - { 0xBF814F, "Target Cell ID List" }, - { 0x9F8150, "User Group" }, - { 0x9F8151, "User Zone Data" }, - { 0x9F8152, "CDMA Connection Reference" }, - { 0xBF8153, "CDMA Connection Reference Information" }, - { 0xBF8154, "CDMA Connection Reference List" }, - { 0x9F8155, "CDMA State" }, - { 0x9F8156, "Change Service Attributes" }, - { 0x9F8157, "Data Key" }, - { 0x9F8158, "Data Privacy Parameters" }, - { 0x9F8159, "ISLP Information" }, /* IS-737 *SPEC CONFLICT* */ - { 0x9F815A, "Reason List" }, - { 0x9F815B, "Second Inter MSC Circuit ID" }, - { 0x9F815C, "TDMA Bandwidth" }, - { 0x9F815D, "TDMA Data Features Indicator" }, - { 0x9F815E, "TDMA Data Mode" }, - { 0x9F815F, "TDMA Voice Mode" }, - { 0x9F8160, "Analog Redirect Info" }, - { 0xBF8161, "Analog Redirect Record" }, - { 0x9F8162, "CDMA Channel Number" }, - { 0xBF8163, "CDMA Channel Number List" }, - { 0xBF8164, "CDMA Power Combined Indicator" }, - { 0x9F8165, "CDMA Redirect Record" }, - { 0x9F8166, "CDMA Search Parameters" }, - { 0x9F8168, "CDMA Network Identification" }, - { 0x9F8169, "Network TMSI" }, - { 0x9F816A, "Network TMSI Expiration Time" }, - { 0x9F816B, "New Network TMSI" }, - { 0x9F816C, "Required Parameters Mask" }, - { 0x9F816D, "Service Redirection Cause" }, - { 0x9F816E, "Service Redirection Info" }, - { 0x9F816F, "Roaming Indication" }, - { 0x9F8170, "Emergency Services Routing Digits" }, - { 0x9F8171, "Special Handling" }, - { 0x9F8172, "International Mobile Subscriber Identity" }, - { 0x9F8173, "Calling Party Name" }, - { 0x9F8174, "Display Text" }, - { 0x9F8175, "Redirecting Party Name" }, - { 0x9F8176, "Service ID" }, - { 0x9F8177, "All Or None" }, - { 0x9F8178, "Change" }, - { 0xBF8179, "Data Access Element" }, - { 0xBF817A, "Data Access Element List" }, - { 0x9F817B, "Data ID" }, - { 0x9F817C, "Database Key" }, - { 0x9F817D, "Data Result" }, - { 0xBF817E, "Data Update Result" }, - { 0xBF817F, "Data Update Result List" }, - { 0x9F8200, "Data Value" }, - { 0xBF8202, "Execute Script" }, - { 0x9F8203, "Failure Cause" }, - { 0x9F8204, "Failure Type" }, - { 0x9F8205, "Global Title" }, - { 0xBF8206, "Modification Request" }, - { 0xBF8207, "Modification Request List" }, - { 0xBF8208, "Modification Result List" }, - { 0x9F8209, "Private Specialized Resource" }, - { 0x9F820B, "Script Argument" }, - { 0x9F820C, "Script Name" }, - { 0x9F820D, "Script Result" }, - { 0xBF820E, "Service Data Access Element" }, - { 0xBF820F, "Service Data Access Element List" }, - { 0xBF8210, "Service Data Result" }, - { 0xBF8211, "Service Data Result List" }, - { 0x9F8212, "Specialized Resource" }, - { 0x9F8213, "Time Date Offset" }, - { 0xBF8214, "Trigger Address List" }, - { 0x9F8215, "Trigger Capability" }, - { 0xBF8216, "Trigger List" }, - { 0x9F8217, "Trigger Type" }, - { 0xBF8218, "WIN Capability" }, - { 0x9F8219, "WIN Operations Capability" }, - { 0x9F821B, "WIN Trigger List" }, - { 0x9F821C, "MSC Address" }, - { 0x9F821D, "Suspicious Access" }, - { 0x9F821E, "Mobile Station IMSI" }, - { 0x9F821F, "Newly Assigned IMSI" }, - { 0x9F822A, "Command Code" }, - { 0x9F822B, "Display Text 2" }, - { 0x9F822C, "Page Count" }, - { 0x9F822D, "Page Response Time" }, - { 0x9F822E, "SMS Transaction ID" }, - { 0x9F823C, "CAVE Key" }, - { 0x9F8241, "CDMA2000 Mobile Supported Capabilities" }, - { 0x9F8245, "Enhanced Privacy Encryption Report" }, - { 0x9F8246, "Inter Message Time" }, - { 0x9F8247, "MSID Usage" }, - { 0x9F8248, "New MIN Extension" }, - { 0x9F825C, "QoS Priority" }, - { 0x9F825F, "CDMA MS Measured Channel Identity" }, - { 0x9F8264, "CDMA2000 Handoff Invoke IOS Data" }, - { 0x9F8265, "CDMA2000 Handoff Response IOS Data" }, - { 0x9F8304, "MIN Extension" }, - - { 0xBF822F, "Call Recovery ID" }, - { 0xBF8230, "Call Recovery ID List" }, - { 0xBF8250, "Position Information" }, - { 0xBF825A, "CDMA PSMM List" }, - { 0x9F820A, "Resume PIC" }, - { 0x9F8231, "DMH Service ID" }, - { 0x9F8232, "Feature Indicator" }, - { 0x9F8233, "Control Network ID" }, - { 0x9F8234, "Release Cause" }, - { 0x9F8235, "Time Of Day" }, - { 0x9F8236, "Call Status" }, - { 0x9F8237, "DMH Charge Information" }, - { 0x9F8238, "DMH Billing Indicator" }, - { 0x9F8239, "MS Status" }, - { 0x9F823B, "Position Information Code" }, - { 0x9F8249, "DTX Indication" }, - { 0x9F824A, "CDMA Mobile Capabilities" }, - { 0x9F824B, "Generalized Time" }, - { 0x9F824C, "Generic Digits" }, - { 0x9F824D, "Geographic Position" }, - { 0x9F824E, "Mobile Call Status" }, - { 0x9F824F, "Mobile Position Capability" }, - { 0x9F8251, "Position Request Type" }, - { 0x9F8252, "Position Result" }, - { 0x9F8253, "Position Source" }, - { 0x9F8254, "ACG Encountered" }, - { 0x9F8255, "Control Type" }, - { 0x9F8256, "Gap Duration" }, - { 0x9F8257, "SCF Overload Gap Interval" }, - { 0x9F8258, "Service Management System Gap Interval" }, - { 0x9F8259, "CDMA PSMM Count" }, - { 0x9F825B, "CDMA Serving One Way Delay 2" }, - { 0x9F825D, "PDSN Address" }, - { 0x9F825E, "PDSN Protocol Type" }, - { 0x9F8261, "Range" }, - { 0x9F8263, "Calling Party Category" }, - { 0x9F8266, "LCS Client ID" }, - { 0x9F8267, "TDMA MAHO Cell ID" }, - { 0x9F8268, "TDMA MAHO Channel" }, - { 0x9F8269, "CDMA Service Option Connection Identifier" }, - { 0x9F826A, "TDMA Time Alignment" }, - { 0x9F826C, "TDMA MAHO Request" }, - { 0, NULL }, -}; + TransactionId_table = g_hash_table_new(g_str_hash, g_str_equal); -/* ANSI TCAP component type */ -#define ANSI_TC_INVOKE_L 0xe9 -#define ANSI_TC_RRL 0xea -#define ANSI_TC_RE 0xeb -#define ANSI_TC_REJECT 0xec -#define ANSI_TC_INVOKE_N 0xed -#define ANSI_TC_RRN 0xee - -static const value_string ansi_cmp_type_strings[] = { - { ANSI_TC_INVOKE_L, "Invoke(Last)" }, - { ANSI_TC_RRL, "RetRes(Last)" }, - { ANSI_TC_RE, "RetErr" }, - { ANSI_TC_REJECT, "Reject" }, - { ANSI_TC_INVOKE_N, "Invoke(Not Last)" }, - { ANSI_TC_RRN, "RetRes(Not Last)" }, - { 0, NULL }, -}; +} +static void +ansi_map_init_protocol(void) +{ + ansi_map_init_transaction_table(); +} +/* value strings */ const value_string ansi_map_opr_code_strings[] = { { 1, "Handoff Measurement Request" }, { 2, "Facilities Directive" }, @@ -625,111 +1049,9 @@ const value_string ansi_map_opr_code_strings[] = { { 0, NULL }, }; -static const value_string ansi_tele_strings[] = { - { 1, "Reserved for maintenance" }, - { 4096, "AMPS Extended Protocol Enhanced Services" }, - { 4097, "CDMA Cellular Paging Teleservice" }, - { 4098, "CDMA Cellular Messaging Teleservice" }, - { 4099, "CDMA Voice Mail Notification" }, - { 32513, "TDMA Cellular Messaging Teleservice" }, - { 32520, "TDMA System Assisted Mobile Positioning through Satellite (SAMPS)" }, - { 32584, "TDMA Segmented System Assisted Mobile Positioning Service" }, - { 0, NULL }, -}; - -#define NUM_BAND_CLASS_STR (sizeof(band_class_str)/sizeof(gchar *)) -static const gchar *band_class_str[] = { - "800 MHz Cellular System", - "1.850 to 1.990 GHz Broadband PCS", - "872 to 960 MHz TACS Band", - "832 to 925 MHz JTACS Band", - "1.750 to 1.870 GHz Korean PCS", - "450 MHz NMT", - "2 GHz IMT-2000 Band", - "North American 700 MHz Cellular Band", - "1.710 to 1.880 GHz PCS", - "880 to 960 MHz Band", - "Secondary 800 MHz Band", - "400 MHz European PAMR Band", - "800 MHz European PAMR Band" -}; - -#define NUM_QOS_PRI_STR (sizeof(qos_pri_str)/sizeof(gchar *)) -static const gchar *qos_pri_str[] = { - "Priority Level 0. This is the lowest level", - "Priority Level 1", - "Priority Level 2", - "Priority Level 3", - "Priority Level 4", - "Priority Level 5", - "Priority Level 6", - "Priority Level 7", - "Priority Level 8", - "Priority Level 9", - "Priority Level 10", - "Priority Level 11", - "Priority Level 12", - "Priority Level 13", - "Reserved, treat as Priority Level 14", - "Reserved, treat as Priority Level 15" -}; - -/* - * would prefer to have had the define set to the exact number of - * elements in the array but that is not without it's own problems - * (sizeof(ansi_a_elem_1_strings)/sizeof(value_string)) - */ -#define NUM_IOS_ELEM ANSI_A_MAX_NUM_IOS_ELEM_1_STRINGS -static gint ett_ansi_map_ios_elem[NUM_IOS_ELEM]; - - -/* Initialize the protocol and registered fields */ -static int proto_ansi_map = -1; - -static int ansi_map_tap = -1; - -static int hf_ansi_map_tag = -1; -static int hf_ansi_map_length = -1; -static int hf_ansi_map_id = -1; -static int hf_ansi_map_opr_code = -1; -static int hf_ansi_map_param_id = -1; -static int hf_ansi_map_ios_elem_id = -1; -static int hf_ansi_map_min = -1; -static int hf_ansi_map_number = -1; - -static int hf_ansi_map_billing_id = -1; - -/* Initialize the subtree pointers */ -static gint ett_ansi_map = -1; -static gint ett_opr_code = -1; -static gint ett_component = -1; -static gint ett_components = -1; -static gint ett_params = -1; -static gint ett_param = -1; -static gint ett_error = -1; -static gint ett_problem = -1; -static gint ett_natnum = -1; -static gint ett_call_mode = -1; -static gint ett_chan_data = -1; -static gint ett_code_chan = -1; -static gint ett_clr_dig_mask = -1; -static gint ett_ent_dig_mask = -1; -static gint ett_all_dig_mask = -1; - - -static char bigbuf[1024]; -static dissector_handle_t data_handle; -static dissector_table_t is637_tele_id_dissector_table; /* IS-637 Teleservice ID */ -static dissector_table_t is683_dissector_table; /* IS-683-A (OTA) */ -static dissector_table_t is801_dissector_table; /* IS-801 (PLD) */ -static packet_info *g_pinfo; -static proto_tree *g_tree; -static gint32 ansi_map_sms_tele_id = -1; -static gboolean is683_ota; -static gboolean is801_pld; -static gboolean ansi_map_is_invoke; -static tvbuff_t *bd_tvb; - +static int dissect_invokeData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset); +static int dissect_returnData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset); +static int dissect_ansi_map_SystemMyTypeCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_); typedef struct dgt_set_t { @@ -743,12333 +1065,12736 @@ static dgt_set_t Dgt_tbcd = { '0','1','2','3','4','5','6','7','8','9','?','B','C','*','#' } }; - -static dgt_set_t Dgt_msid = { +static dgt_set_t Dgt1_9_bcd = { { /* 0 1 2 3 4 5 6 7 8 9 a b c d e */ '0','1','2','3','4','5','6','7','8','9','?','?','?','?','?' } }; +/* Assumes the rest of the tvb contains the digits to be turned into a string + */ +static char* +unpack_digits2(tvbuff_t *tvb, int offset,dgt_set_t *dgt){ -/* FUNCTIONS */ + int length; + guint8 octet; + int i=0; + char *digit_str; -/* - * Unpack BCD input pattern into output ASCII pattern - * - * Input Pattern is supplied using the same format as the digits - * - * Returns: length of unpacked pattern - */ -static int -my_dgt_tbcd_unpack( - char *out, /* ASCII pattern out */ - guchar *in, /* packed pattern in */ - int num_octs, /* Number of octets to unpack */ - dgt_set_t *dgt /* Digit definitions */ - ) -{ - int cnt = 0; - unsigned char i; + length = tvb_length(tvb); + if (length < offset) + return ""; + digit_str = ep_alloc((length - offset)*2+1); - while (num_octs) - { - /* - * unpack first value in byte - */ - i = *in++; - *out++ = dgt->out[i & 0x0f]; - cnt++; + while ( offset < length ){ - /* - * unpack second value in byte - */ - i >>= 4; + octet = tvb_get_guint8(tvb,offset); + digit_str[i] = dgt->out[octet & 0x0f]; + i++; - if (i == 0x0f) /* odd number bytes - hit filler */ - break; + /* + * unpack second value in byte + */ + octet = octet >> 4; - *out++ = dgt->out[i]; - cnt++; - num_octs--; - } + if (octet == 0x0f) /* odd number bytes - hit filler */ + break; - *out = '\0'; + digit_str[i] = dgt->out[octet & 0x0f]; + i++; + offset++; - return(cnt); + } + digit_str[i]= '\0'; + return digit_str; } -/* PARAM FUNCTIONS */ -#define EXTRANEOUS_DATA_CHECK(edc_len, edc_max_len) \ - if ((edc_len) > (edc_max_len)) \ - { \ - proto_tree_add_text(tree, asn1->tvb, \ - asn1->offset, (edc_len) - (edc_max_len), "Extraneous Data"); \ - asn1->offset += ((edc_len) - (edc_max_len)); \ - } -#define SHORT_DATA_CHECK(sdc_len, sdc_min_len) \ - if ((sdc_len) < (sdc_min_len)) \ - { \ - proto_tree_add_text(tree, asn1->tvb, \ - asn1->offset, (sdc_len), "Short Data (?)"); \ - asn1->offset += (sdc_len); \ - return; \ - } +/* Type of Digits (octet 1, bits A-H) */ +static const value_string ansi_map_type_of_digits_vals[] = { + { 0, "Not Used" }, + { 1, "Dialed Number or Called Party Number" }, + { 2, "Calling Party Number" }, + { 3, "Caller Interaction" }, + { 4, "Routing Number" }, + { 5, "Billing Number" }, + { 6, "Destination Number" }, + { 7, "LATA" }, + { 8, "Carrier" }, + { 0, NULL } +}; +/* Nature of Number (octet 2, bits A-H )*/ +static const true_false_string ansi_map_na_bool_val = { + "International", + "National" +}; +static const true_false_string ansi_map_pi_bool_val = { + "Presentation Restricted", + "Presentation Allowed" +}; +static const true_false_string ansi_map_navail_bool_val = { + "Number is not available", + "Number is available" +}; +static const true_false_string ansi_map_si_bool_val = { + "User provided, screening passed", + "User provided, not screened" +}; +static const value_string ansi_map_si_vals[] = { + { 0, "User provided, not screened"}, + { 1, "User provided, screening passed"}, + { 2, "User provided, screening failed"}, + { 3, "Network provided"}, + { 0, NULL } +}; +/* Encoding (octet 3, bits A-D) */ +static const value_string ansi_map_digits_enc_vals[] = { + { 0, "Not used"}, + { 1, "BCD"}, + { 2, "IA5"}, + { 3, "Octet string"}, + { 0, NULL } +}; +/* Numbering Plan (octet 3, bits E-H) */ +static const value_string ansi_map_np_vals[] = { + { 0, "Unknown or not applicable"}, + { 1, "ISDN Numbering"}, + { 2, "Telephony Numbering (ITU-T Rec. E.164,E.163)"}, + { 3, "Data Numbering (ITU-T Rec. X.121)"}, + { 4, "Telex Numbering (ITU-T Rec. F.69)"}, + { 5, "Maritime Mobile Numbering"}, + { 6, "Land Mobile Numbering (ITU-T Rec. E.212)"}, + { 7, "Private Numbering Plan"}, + { 13, "SS7 Point Code (PC) and Subsystem Number (SSN)"}, + { 14, "Internet Protocol (IP) Address."}, + { 15, "Reserved for extension"}, + { 0, NULL } +}; -#define EXACT_DATA_CHECK(edc_len, edc_eq_len) \ - if ((edc_len) != (edc_eq_len)) \ - { \ - proto_tree_add_text(tree, asn1->tvb, \ - asn1->offset, (edc_len), "Unexpected Data Length"); \ - asn1->offset += (edc_len); \ - return; \ - } +static void +dissect_ansi_map_min_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + char *digit_str; + int offset = 0; + proto_item *item; + proto_tree *subtree; -static void -param_mscid(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 market_id, switch_num; - guint saved_offset; + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_mintype); + + digit_str = unpack_digits2(tvb, offset, &Dgt1_9_bcd); + proto_tree_add_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, digit_str); +} - EXACT_DATA_CHECK(len, 3); +static void +dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + + guint8 octet; + int offset = 0; + char *digit_str; + proto_item *item; + proto_tree *subtree; + + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_digitstype); + + /* Octet 1 */ + proto_tree_add_item(subtree, hf_ansi_map_type_of_digits, tvb, offset, 1, FALSE); + offset++; + /* Octet 2 */ + proto_tree_add_item(subtree, hf_ansi_map_si, tvb, offset, 1, FALSE); + proto_tree_add_item(subtree, hf_ansi_map_navail, tvb, offset, 1, FALSE); + proto_tree_add_item(subtree, hf_ansi_map_pi, tvb, offset, 1, FALSE); + proto_tree_add_item(subtree, hf_ansi_map_na, tvb, offset, 1, FALSE); + offset++; + /* Octet 3 */ + octet = tvb_get_guint8(tvb,offset); + proto_tree_add_item(subtree, hf_ansi_map_np, tvb, offset, 1, FALSE); + proto_tree_add_item(subtree, hf_ansi_map_digits_enc, tvb, offset, 1, FALSE); + offset++; + /* Octet 4 - */ + switch(octet>>4){ + case 0:/* Unknown or not applicable */ + case 1:/* ISDN Numbering (not used in this Standard). */ + case 3:/* Data Numbering (ITU-T Rec. X.121) (not used in this Standard). */ + case 4:/* Telex Numbering (ITU-T Rec. F.69) (not used in this Standard). */ + case 5:/* Maritime Mobile Numbering (not used in this Standard). */ + proto_tree_add_text(subtree, tvb, offset, -1, "This Number plan should not have been used"); + break; + case 2:/* Telephony Numbering (ITU-T Rec. E.164,E.163). */ + case 6:/* Land Mobile Numbering (ITU-T Rec. E.212) */ + case 7:/* Private Numbering Plan */ + proto_tree_add_item(subtree, hf_ansi_map_nr_digits, tvb, offset, 1, FALSE); + offset++; + switch ((octet&0xf)){ + case 1: + /* BCD Coding */ + digit_str = unpack_digits2(tvb, offset, &Dgt_tbcd); + proto_tree_add_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, digit_str); + break; + case 2: + /* IA5 Coding */ + proto_tree_add_item(subtree, hf_ansi_map_ia5_digits, tvb, offset, -1, FALSE); + break; + case 3: + /* Octet string */ + break; + default: + break; + } + break; + case 13:/* ANSI SS7 Point Code (PC) and Subsystem Number (SSN). */ + break; + case 14:/* Internet Protocol (IP) Address. */ + break; + default: + proto_tree_add_text(subtree, tvb, offset, -1, "This Number plan should not have been used"); + break; + } + +} +/* 6.5.3.13. Subaddress */ + +static const true_false_string ansi_map_Odd_Even_Ind_bool_val = { + "Odd", + "Even" +}; +/* Type of Subaddress (octet 1, bits E-G) */ +static const value_string ansi_map_sub_addr_type_vals[] = { + { 0, "NSAP (CCITT Rec. X.213 or ISO 8348 AD2)"}, + { 1, "User specified"}, + { 2, "Reserved"}, + { 3, "Reserved"}, + { 4, "Reserved"}, + { 5, "Reserved"}, + { 6, "Reserved"}, + { 7, "Reserved"}, + { 0, NULL } +}; - saved_offset = asn1->offset; +static void +dissect_ansi_map_subaddress(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + int offset = 0; + proto_item *item; + proto_tree *subtree; - asn1_int32_value_decode(asn1, 2, &market_id); - asn1_int32_value_decode(asn1, 1, &switch_num); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_billingid); + /* Type of Subaddress (octet 1, bits E-G) */ + proto_tree_add_item(subtree, hf_ansi_map_subaddr_type, tvb, offset, 1, FALSE); + /* Odd/Even Indicator (O/E) (octet 1, bit D) */ + proto_tree_add_item(subtree, hf_ansi_map_subaddr_odd_even, tvb, offset, 1, FALSE); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Market ID %u Switch Number %u", - market_id, switch_num); } +/* + * 6.5.2.2 ActionCode + * Table 114 ActionCode value + * +/* 6.5.2.2 ActionCode(TIA/EIA-41.5-D, page 5-129) */ + +static const value_string ansi_map_ActionCode_vals[] = { + { 0, "Not used"}, + { 1, "Continue processing"}, + { 2, "Disconnect call"}, + { 3, "Disconnect call leg"}, + { 4, "Conference Calling Drop Last Party"}, + { 5, "Bridge call leg(s) to conference call"}, + { 6, "Drop call leg on busy or routing failure"}, + { 7, "Disconnect all call legs"}, + { 8, "Attach MSC to OTAF"}, + { 9, "Initiate RegistrationNotification"}, + { 10, "Generate Public Encryption values"}, + { 11, "Generate A-key"}, + { 12, "Perform SSD Update procedure"}, + { 13, "Perform Re-authentication procedure"}, + { 14, "Release TRN"}, + { 15, "Commit A-key"}, + { 16, "Release Resources (e.g., A-key, Traffic Channel)"}, + { 17, "Record NEWMSID"}, + { 18, "Allocate Resources (e.g., Multiple message traffic channel delivery)."}, + { 19, "Generate Authentication Signature"}, + { 20, "Release leg and redirect subscriber"}, + { 0, NULL } +}; +/* 6.5.2.3 AlertCode */ + +/* Pitch (octet 1, bits G-H) */ +static const value_string ansi_map_AlertCode_Pitch_vals[] = { + { 0, "Medium pitch"}, + { 1, "High pitch"}, + { 2, "Low pitch"}, + { 3, "Reserved"}, + { 0, NULL } +}; +/* Cadence (octet 1, bits A-F) */ +static const value_string ansi_map_AlertCode_Cadence_vals[] = { + { 0, "NoTone"}, + { 1, "Long"}, + { 2, "ShortShort"}, + { 3, "ShortShortLong"}, + { 4, "ShortShort2"}, + { 5, "ShortLongShort"}, + { 6, "ShortShortShortShort"}, + { 7, "PBXLong"}, + { 8, "PBXShortShort"}, + { 9, "PBXShortShortLong"}, + { 0, "NoTone"}, + + { 10, "PBXShortLongShort"}, + { 11, "PBXShortShortShortShort"}, + { 12, "PipPipPipPip"}, + { 13, "Reserved. Treat the same as value 0, NoTone"}, + { 14, "Reserved. Treat the same as value 0, NoTone"}, + { 15, "Reserved. Treat the same as value 0, NoTone"}, + { 16, "Reserved. Treat the same as value 0, NoTone"}, + { 17, "Reserved. Treat the same as value 0, NoTone"}, + { 18, "Reserved. Treat the same as value 0, NoTone"}, + { 19, "Reserved. Treat the same as value 0, NoTone"}, + { 20, NULL } +}; +/* Alert Action (octet 2, bits A-C) */ +static const value_string ansi_map_AlertCode_Alert_Action_vals[] = { + { 0, "Alert without waiting to report"}, + { 1, "Apply a reminder alert once"}, + { 2, "Other values reserved. Treat the same as value 0, Alert without waiting to report"}, + { 3, "Other values reserved. Treat the same as value 0, Alert without waiting to report"}, + { 4, "Other values reserved. Treat the same as value 0, Alert without waiting to report"}, + { 5, "Other values reserved. Treat the same as value 0, Alert without waiting to report"}, + { 6, "Other values reserved. Treat the same as value 0, Alert without waiting to report"}, + { 7, "Other values reserved. Treat the same as value 0, Alert without waiting to report"}, + { 0, NULL } +}; static void -param_page_ind(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +dissect_ansi_map_alertcode(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - saved_offset = asn1->offset; + int offset = 0; + proto_item *item; + proto_tree *subtree; - asn1_int32_value_decode(asn1, 1, &value); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_billingid); + /* Pitch (octet 1, bits G-H) */ + proto_tree_add_item(subtree, hf_ansi_alertcode_pitch, tvb, offset, 1, FALSE); + /* Cadence (octet 1, bits A-F) */ + proto_tree_add_item(subtree, hf_ansi_alertcode_cadence, tvb, offset, 1, FALSE); + offset++; + + /* Alert Action (octet 2, bits A-C) */ + proto_tree_add_item(subtree, hf_ansi_alertcode_alertaction, tvb, offset, 1, FALSE); + +} +/* 6.5.2.4 AlertResult */ +/* Result (octet 1) */ +static const value_string ansi_map_AlertResult_result_vals[] = { + { 0, "Not specified"}, + { 1, "Success"}, + { 2, "Failure"}, + { 3, "Denied"}, + { 4, "NotAttempted"}, + { 5, "NoPageResponse"}, + { 6, "Busy"}, + { 0, NULL } +}; - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Page"; break; - case 2: str = "Listen only"; break; - default: - if ((value >= 3) && (value <= 223)) { str = "Reserved, treat as Page"; } - else { str = "Reserved for protocol extension, treat as Page"; } - break; - } +/* 6.5.2.5 AnnouncementCode Updatef from NS0018Re*/ +/* Tone (octet 1) */ +static const value_string ansi_map_AnnouncementCode_tone_vals[] = { + { 0, "DialTone"}, + { 1, "RingBack or AudibleAlerting"}, + { 2, "InterceptTone or MobileReorder"}, + { 3, "CongestionTone or ReorderTone"}, + { 4, "BusyTone"}, + { 5, "ConfirmationTone"}, + { 6, "AnswerTone"}, + { 7, "CallWaitingTone"}, + { 8, "OffHookTone"}, + { 17, "RecallDialTone"}, + { 18, "BargeInTone"}, + { 20, "PPCInsufficientTone"}, + { 21, "PPCWarningTone1"}, + { 22, "PPCWarningTone2"}, + { 23, "PPCWarningTone3"}, + { 24, "PPCDisconnectTone"}, + { 25, "PPCRedirectTone"}, + { 63, "TonesOff"}, + { 192, "PipTone"}, + { 193, "AbbreviatedIntercept"}, + { 194, "AbbreviatedCongestion"}, + { 195, "WarningTone"}, + { 196, "DenialToneBurst"}, + { 197, "DialToneBurst"}, + { 250, "IncomingAdditionalCallTone"}, + { 251, "PriorityAdditionalCallTone"}, + { 0, NULL } +}; +/* Class (octet 2, bits A-D) */ +static const value_string ansi_map_AnnouncementCode_class_vals[] = { + { 0, "Concurrent"}, + { 1, "Sequential"}, + { 0, NULL } +}; +/* Standard Announcement (octet 3) Updated with N.S0015 */ +static const value_string ansi_map_AnnouncementCode_std_ann_vals[] = { + { 0, "None"}, + { 1, "UnauthorizedUser"}, + { 2, "InvalidESN"}, + { 3, "UnauthorizedMobile"}, + { 4, "SuspendedOrigination"}, + { 5, "OriginationDenied"}, + { 6, "ServiceAreaDenial"}, + { 16, "PartialDial"}, + { 17, "Require1Plus"}, + { 18, "Require1PlusNPA"}, + { 19, "Require0Plus"}, + { 20, "Require0PlusNPA"}, + { 21, "Deny1Plus"}, + { 22, "Unsupported10plus"}, + { 23, "Deny10plus"}, + { 24, "Unsupported10XXX"}, + { 25, "Deny10XXX"}, + { 26, "Deny10XXXLocally"}, + { 27, "Require10Plus"}, + { 28, "RequireNPA"}, + { 29, "DenyTollOrigination"}, + { 30, "DenyInternationalOrigination"}, + { 31, "Deny0Minus"}, + { 48, "DenyNumber"}, + { 49, "AlternateOperatorServices"}, + { 64, "No Circuit or AllCircuitsBusy or FacilityProblem"}, + { 65, "Overload"}, + { 66, "InternalOfficeFailure"}, + { 67, "NoWinkReceived"}, + { 68, "InterofficeLinkFailure"}, + { 69, "Vacant"}, + { 70, "InvalidPrefix or InvalidAccessCode"}, + { 71, "OtherDialingIrregularity"}, + { 80, "VacantNumber or DisconnectedNumber"}, + { 81, "DenyTermination"}, + { 82, "SuspendedTermination"}, + { 83, "ChangedNumber"}, + { 84, "InaccessibleSubscriber"}, + { 85, "DenyIncomingTol"}, + { 86, "RoamerAccessScreening"}, + { 87, "RefuseCall"}, + { 88, "RedirectCall"}, + { 89, "NoPageResponse"}, + { 90, "NoAnswer"}, + { 96, "RoamerIntercept"}, + { 97, "GeneralInformation"}, + { 112, "UnrecognizedFeatureCode"}, + { 113, "UnauthorizedFeatureCode"}, + { 114, "RestrictedFeatureCode"}, + { 115, "InvalidModifierDigits"}, + { 116, "SuccessfulFeatureRegistration"}, + { 117, "SuccessfulFeatureDeRegistration"}, + { 118, "SuccessfulFeatureActivation"}, + { 119, "SuccessfulFeatureDeActivation"}, + { 120, "InvalidForwardToNumber"}, + { 121, "CourtesyCallWarning"}, + { 128, "EnterPINSendPrompt"}, + { 129, "EnterPINPrompt"}, + { 130, "ReEnterPINSendPrompt"}, + { 131, "ReEnterPINPrompt"}, + { 132, "EnterOldPINSendPrompt"}, + { 133, "EnterOldPINPrompt"}, + { 134, "EnterNewPINSendPrompt"}, + { 135, "EnterNewPINPrompt"}, + { 136, "ReEnterNewPINSendPrompt"}, + { 137, "ReEnterNewPINPrompt"}, + { 138, "EnterPasswordPrompt"}, + { 139, "EnterDirectoryNumberPrompt"}, + { 140, "ReEnterDirectoryNumberPrompt"}, + { 141, "EnterFeatureCodePrompt"}, + { 142, "EnterEnterCreditCardNumberPrompt"}, + { 143, "EnterDestinationNumberPrompt"}, + { 152, "PPCInsufficientAccountBalance"}, + { 153, "PPCFiveMinuteWarning"}, + { 154, "PPCThreeMinuteWarning"}, + { 155, "PPCTwoMinuteWarning"}, + { 156, "PPCOneMinuteWarning"}, + { 157, "PPCDisconnect"}, + { 158, "PPCRedirect"}, + { 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); - EXTRANEOUS_DATA_CHECK(len, 1); -} static void -param_srvc_ind(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +dissect_ansi_map_announcementcode(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - EXACT_DATA_CHECK(len, 1); + int offset = 0; + proto_item *item; + proto_tree *subtree; - saved_offset = asn1->offset; + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_billingid); + + /* Tone (octet 1) */ + proto_tree_add_item(subtree, hf_ansi_map_announcementcode_tone, tvb, offset, 1, FALSE); + offset++; + /* Class (octet 2, bits A-D) */ + proto_tree_add_item(subtree, hf_ansi_map_announcementcode_class, tvb, offset, 1, FALSE); + offset++; + /* Standard Announcement (octet 3) */ + proto_tree_add_item(subtree, hf_ansi_map_announcementcode_std_ann, tvb, offset, 1, FALSE); + offset++; + /* Custom Announcement ( octet 4 ) + e. The assignment of this octet is left to bilateral agreement. When a Custom + Announcement is specified it takes precedence over either the Standard + Announcement or Tone + */ + proto_tree_add_item(subtree, hf_ansi_map_announcementcode_cust_ann, tvb, offset, 1, FALSE); - asn1_int32_value_decode(asn1, 1, &value); +} +/* 6.5.2.8 AuthenticationCapability Updated N.S0003*/ +static const value_string ansi_map_AuthenticationCapability_vals[] = { + { 0, "Not used"}, + { 1, "No authentication required"}, + { 2, "Authentication required"}, + { 128, "Authentication required and UIM capable."}, + { 0, NULL } +}; - switch (value) - { - case 0: str = "Undefined Service"; break; - case 1: str = "CDMA OTASP Service"; is683_ota = TRUE; break; - case 2: str = "TDMA OTASP Service"; break; - case 3: str = "CDMA OTAPA Service"; is683_ota = TRUE; break; - case 4: str = "CDMA Position Determination Service"; is801_pld = TRUE; break; - case 5: str = "AMPS Position Determination Service"; break; - default: - if ((value >= 6) && (value <= 223)) { str = "Reserved, treat as Undefined Service"; } - else { str = "Reserved for protocol extension, treat as Undefined Service"; } - break; - } +/* 6.5.2.14 AuthorizationPeriod*/ + +/* Period (octet 1) */ +static const value_string ansi_map_authorizationperiod_period_vals[] = { + { 0, "Not used"}, + { 1, "Per Call"}, + { 2, "Hours"}, + { 3, "Days"}, + { 4, "Weeks"}, + { 5, "Per Agreement"}, + { 6, "Indefinite (i.e., authorized until canceled or deregistered)"}, + { 7, "Number of calls. Re-authorization should be attempted after this number of (rejected) call attempts"}, + { 0, NULL } +}; +/* Value (octet 2) +Number of minutes hours, days, weeks, or +number of calls (as per Period). If Period +indicates anything else the Value is set to zero +on sending and ignored on receipt. +*/ +static void +dissect_ansi_map_authorizationperiod(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + + int offset = 0; + proto_item *item; + proto_tree *subtree; + + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_billingid); + proto_tree_add_item(subtree, hf_ansi_map_authorizationperiod_period, tvb, offset, 1, FALSE); + offset++; + proto_tree_add_item(subtree, hf_ansi_map_value, tvb, offset, 1, FALSE); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s (%u)", - str, - value); } +/* 6.5.2.15 AvailabilityType */ +static const value_string ansi_map_AvailabilityType_vals[] = { + { 0, "Not used"}, + { 1, "Unspecified MS inactivity type"}, + { 0, NULL } +}; +/* 6.5.2.16 BillingID */ static void -param_sme_report(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +dissect_ansi_map_billingid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - EXACT_DATA_CHECK(len, 1); + int offset = 0; + proto_item *item; + proto_tree *subtree; - saved_offset = asn1->offset; + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_billingid); - asn1_int32_value_decode(asn1, 1, &value); + proto_tree_add_item(subtree, hf_ansi_map_MarketID, tvb, offset, 2, FALSE); + offset = offset + 2; + proto_tree_add_item(subtree, hf_ansi_map_swno, tvb, offset, 1, FALSE); + offset++; + /* ID Number */ + proto_tree_add_item(subtree, hf_ansi_map_idno, tvb, offset, 3, FALSE); + offset = offset + 3; + proto_tree_add_item(subtree, hf_ansi_map_segcount, tvb, offset, 1, FALSE); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Signaling Message Encryption enabling not attempted"; break; - case 2: str = "Signaling Message Encryption enabling no response"; break; - case 3: str = "Signaling Message Encryption is enabled"; break; - case 4: str = "Signaling Message Encryption enabling failed"; break; - default: - if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as Signaling Message Encryption enabling not attempted"; } - else { str = "Reserved for protocol extension, treat as Signaling Message Encryption enabling not attempted"; } - break; - } - - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s (%u)", - str, - value); } -static void -param_alert_code(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - SHORT_DATA_CHECK(len, 2); +/* 6.5.2.20 CallingFeaturesIndicator */ +static const value_string ansi_map_FeatureActivity_vals[] = { + { 0, "Not used"}, + { 1, "Not authorized"}, + { 2, "Authorized but de-activated"}, + { 3, "Authorized and activated"}, + { 0, NULL } +}; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static void +dissect_ansi_map_callingfeaturesindicator(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + int offset = 0; + proto_item *item; + proto_tree *subtree; - switch ((value & 0xc0) >> 6) - { - case 0: str = "Medium"; break; - case 1: str = "High"; break; - case 2: str = "Low"; break; - case 3: str = "Reserved"; break; - } + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_mscid); + + /* Call Waiting: FeatureActivity, CW-FA (Octet 1 bits GH ) */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cwfa, tvb, offset, 1, FALSE); + /* Call Forwarding No Answer FeatureActivity, CFNA-FA (Octet 1 bits EF ) */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cfnafa, tvb, offset, 1, FALSE); + /* Call Forwarding Busy FeatureActivity, CFB-FA (Octet 1 bits CD ) */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cfbfa, tvb, offset, 1, FALSE); + /* Call Forwarding Unconditional FeatureActivity, CFU-FA (Octet 1 bits AB ) */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cfufa, tvb, offset, 1, FALSE); + offset++; + + /* Call Transfer: FeatureActivity, CT-FA (Octet 2 bits GH ) */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_ctfa, tvb, offset, 1, FALSE); + /* Voice Privacy FeatureActivity, VP-FA (Octet 2 bits EF ) */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_vpfa, tvb, offset, 1, FALSE); + /* Call Delivery: FeatureActivity (not interpreted on reception by IS-41-C or later) + CD-FA (Octet 2 bits CD ) */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cdfa, tvb, offset, 1, FALSE); + /* Three-Way Calling FeatureActivity, 3WC-FA (Octet 2 bits AB ) */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_3wcfa, tvb, offset, 1, FALSE); + offset++; + + + /* Calling Number Identification Restriction Override FeatureActivity CNIROver-FA (Octet 3 bits GH ) */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cniroverfa, tvb, offset, 1, FALSE); + /* Calling Number Identification Restriction: FeatureActivity CNIR-FA (Octet 3 bits EF ) */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cnirfa, tvb, offset, 1, FALSE); + /* Calling Number Identification Presentation: FeatureActivity CNIP2-FA (Octet 3 bits CD ) */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cnip2fa, tvb, offset, 1, FALSE); + /* Calling Number Identification Presentation: FeatureActivity CNIP1-FA (Octet 3 bits AB ) */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cnip1fa, tvb, offset, 1, FALSE); + offset++; + + /* USCF divert to voice mail: FeatureActivity USCFvm-FA (Octet 4 bits GH ) */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_uscfvmfa, tvb, offset, 1, FALSE); + /* Answer Hold: FeatureActivity AH-FA (Octet 4 bits EF ) N.S0029-0 v1.0 */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_ahfa, tvb, offset, 1, FALSE); + /* Data Privacy Feature Activity DP-FA (Octet 4 bits CD ) N.S0008-0 v 1.0 */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_dpfa, tvb, offset, 1, FALSE); + /* Priority Call Waiting FeatureActivity PCW-FA (Octet 4 bits AB ) */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_pcwfa, tvb, offset, 1, FALSE); + offset++; + + /* USCF divert to mobile station provided DN:FeatureActivity.USCFms-FA (Octet 5 bits AB ) */ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_uscfmsfa, tvb, offset, 1, FALSE); + /* USCF divert to network registered DN:FeatureActivity. USCFnr-FA (Octet 5 bits CD )*/ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_uscfnrfa, tvb, offset, 1, FALSE); + /* CDMA-Packet Data Service: FeatureActivity. CPDS-FA (Octet 5 bits EF ) N.S0029-0 v1.0*/ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cpdsfa, tvb, offset, 1, FALSE); + /* CDMA-Concurrent Service:FeatureActivity. CCS-FA (Octet 5 bits GH ) N.S0029-0 v1.0*/ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_ccsfa, tvb, offset, 1, FALSE); + offset++; + + if ( tvb_length_remaining(tvb,offset) > 0){ + /* TDMA Enhanced Privacy and Encryption:FeatureActivity.TDMA EPE-FA (Octet 6 bits AB ) N.S0029-0 v1.0*/ + proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_epefa, tvb, offset, 1, FALSE); + } - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Pitch, %s", - bigbuf, - str); +} - switch (value & 0x3f) - { - case 0: str = "NoTone"; break; - case 1: str = "Long"; break; - case 2: str = "ShortShort"; break; - case 3: str = "ShortShortLong"; break; - case 4: str = "ShortShort2"; break; - case 5: str = "ShortLongShort"; break; - case 6: str = "ShortShortShortShort"; break; - case 7: str = "PBXLong"; break; - case 8: str = "PBXShortShort"; break; - case 9: str = "PBXShortShortLong"; break; - case 10: str = "PBXShortLongShort"; break; - case 11: str = "PBXShortShortShortShort"; break; - case 12: str = "PipPipPipPip"; break; - default: - str = "Reserved, treat as NoTone"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x3f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Cadence, %s", - bigbuf, - str); +/* 6.5.2.27 CancellationType */ +static const value_string ansi_map_CancellationType_vals[] = { + { 0, "Not used"}, + { 1, "ServingSystemOption"}, + { 2, "ReportInCall."}, + { 3, "Discontinue"}, + { 0, NULL } +}; - saved_offset = asn1->offset; +/* 6.5.2.29 CDMACallMode Updated with N.S0029-0 v1.0*/ +/* Call Mode (octet 1, bit A) */ +static const true_false_string ansi_map_CDMACallMode_cdma_bool_val = { + "CDMA 800 MHz channel (Band Class 0) acceptable.", + "CDMA 800 MHz channel (Band Class 0) not acceptable" +}; +/* Call Mode (octet 1, bit B) */ +static const true_false_string ansi_map_CallMode_amps_bool_val = { + "AAMPS 800 MHz channel acceptable", + "AMPS 800 MHz channel not acceptable" +}; +/* Call Mode (octet 1, bit C) */ +static const true_false_string ansi_map_CallMode_namps_bool_val = { + "NAMPS 800 MHz channel acceptable", + "NAMPS 800 MHz channel not acceptable" +}; +/* Call Mode (octet 1, bit D) */ +static const true_false_string ansi_map_CDMACallMode_cls1_bool_val = { + "CDMA 1900 MHz channel (Band Class 1) acceptable.", + "CDMA 1900 MHz channel (Band Class 1) not acceptable" +}; +/* Call Mode (octet 1, bit E) */ +static const true_false_string ansi_map_CDMACallMode_cls2_bool_val = { + "TACS channel (Band Class 2) acceptable", + "TACS channel (Band Class 2) not acceptable" +}; +/* Call Mode (octet 1, bit F) */ +static const true_false_string ansi_map_CDMACallMode_cls3_bool_val = { + "JTACS channel (Band Class 3) acceptable", + "JTACS channel (Band Class 3) not acceptable" +}; +/* Call Mode (octet 1, bit G) */ +static const true_false_string ansi_map_CDMACallMode_cls4_bool_val = { + "Korean PCS channel (Band Class 4) acceptable", + "Korean PCS channel (Band Class 4) not acceptable" +}; +/* Call Mode (octet 1, bit H) */ +static const true_false_string ansi_map_CDMACallMode_cls5_bool_val = { + "450 MHz channel (Band Class 5) not acceptable", + "450 MHz channel (Band Class 5) not acceptable" +}; +/* Call Mode (octet 2, bit A) */ +static const true_false_string ansi_map_CDMACallMode_cls6_bool_val = { + "2 GHz channel (Band Class 6) acceptable.", + "2 GHz channel (Band Class 6) not acceptable." +}; - asn1_int32_value_decode(asn1, 1, &value); +/* Call Mode (octet 2, bit B) */ +static const true_false_string ansi_map_CDMACallMode_cls7_bool_val = { + "700 MHz channel (Band Class 7) acceptable", + "700 MHz channel (Band Class 7) not acceptable" +}; - other_decode_bitfield_value(bigbuf, value, 0xf8, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +/* Call Mode (octet 2, bit C) */ +static const true_false_string ansi_map_CDMACallMode_cls8_bool_val = { + "1800 MHz channel (Band Class 8) acceptable", + "1800 MHz channel (Band Class 8) not acceptable" +}; +/* Call Mode (octet 2, bit D) */ +static const true_false_string ansi_map_CDMACallMode_cls9_bool_val = { + "900 MHz channel (Band Class 9) acceptable", + "900 MHz channel (Band Class 9) not acceptable" +}; +/* Call Mode (octet 2, bit E) */ +static const true_false_string ansi_map_CDMACallMode_cls10_bool_val = { + "Secondary 800 MHz channel (Band Class 10) acceptable.", + "Secondary 800 MHz channel (Band Class 10) not acceptable." +}; - switch (value & 0x07) - { - case 0: str = "Alert without waiting to report"; break; - case 1: str = "Apply a reminder alert once"; break; - default: - str = "Reserved, treat as Alert without waiting to report"; - break; - } +static void +dissect_ansi_map_cdmacallmode(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + int offset = 0; + proto_item *item; + proto_tree *subtree; - other_decode_bitfield_value(bigbuf, value, 0x07, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Alert Action, %s", - bigbuf, - str); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_mscid); + /* Call Mode (octet 1, bit A) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cdma, tvb, offset, 1, FALSE); + /* Call Mode (octet 1, bit B) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_amps, tvb, offset, 1, FALSE); + /* Call Mode (octet 1, bit C) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_namps, tvb, offset, 1, FALSE); + /* Call Mode (octet 1, bit D) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls1, tvb, offset, 1, FALSE); + /* Call Mode (octet 1, bit E) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls2, tvb, offset, 1, FALSE); + /* Call Mode (octet 1, bit F) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls3, tvb, offset, 1, FALSE); + /* Call Mode (octet 1, bit G) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls4, tvb, offset, 1, FALSE); + /* Call Mode (octet 1, bit H) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls5, tvb, offset, 1, FALSE); + offset++; + + /* Call Mode (octet 2, bit A) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls6, tvb, offset, 1, FALSE); + /* Call Mode (octet 2, bit B) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls7, tvb, offset, 1, FALSE); + /* Call Mode (octet 2, bit C) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls8, tvb, offset, 1, FALSE); + /* Call Mode (octet 2, bit D) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls9, tvb, offset, 1, FALSE); + /* Call Mode (octet 2, bit E) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls10, tvb, offset, 1, FALSE); + +} +/* 6.5.2.30 CDMAChannelData */ +/* Updated with N.S0010-0 v 1.0 */ +/* TODO Add decoding here */ + +/* 6.5.2.31 CDMACodeChannel */ + +/* 6.5.2.41 CDMAStationClassMark */ +/* Power Class: (PC) (octet 1, bits A and B) */ +static const value_string ansi_map_CDMAStationClassMark_pc_vals[] = { + { 0, "Class I"}, + { 1, "Class II"}, + { 2, "Class III"}, + { 3, "Reserved"}, + { 0, NULL } +}; +/* Analog Transmission: (DTX) (octet 1, bit C) */ +static const true_false_string ansi_map_CDMAStationClassMark_dtx_bool_val = { + "Discontinuous", + "Continuous" +}; +/* Slotted Mode Indicator: (SMI) (octet 1, bit F) */ +static const true_false_string ansi_map_CDMAStationClassMark_smi_bool_val = { + "Slotted capable", + "Slotted incapable" +}; +/* Dual-mode Indicator(DMI) (octet 1, bit G) */ +static const true_false_string ansi_map_CDMAStationClassMark_dmi_bool_val = { + "Dual-mode CDMA", + "CDMA only" +}; - EXTRANEOUS_DATA_CHECK(len, 2); -} static void -param_term_acc_type(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +dissect_ansi_map_cdmastationclassmark(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + int offset = 0; + proto_item *item; + proto_tree *subtree; - saved_offset = asn1->offset; + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_mscid); + + /* Dual-mode Indicator(DMI) (octet 1, bit G) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmastationclassmark_dmi, tvb, offset, 1, FALSE); + /* Slotted Mode Indicator: (SMI) (octet 1, bit F) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmastationclassmark_smi, tvb, offset, 1, FALSE); + /* Analog Transmission: (DTX) (octet 1, bit C) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmastationclassmark_dtx, tvb, offset, 1, FALSE); + /* Power Class: (PC) (octet 1, bits A and B) */ + proto_tree_add_item(subtree, hf_ansi_map_cdmastationclassmark_pc, tvb, offset, 1, FALSE); +} +/* 6.5.2.47 ChannelData */ +/* Discontinuous Transmission Mode (DTX) (octet 1, bits E and D) */ +static const value_string ansi_map_ChannelData_dtx_vals[] = { + { 0, "DTX disabled"}, + { 1, "Reserved. Treat the same as value 00, DTX disabled."}, + { 2, "DTX-low mode"}, + { 3, "DTX mode active or acceptable"}, + { 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Not used"; break; - case 252: str = "Mobile-to-Mobile Directory Number access"; break; - case 253: str = "Land-to-Mobile Directory Number access"; break; - case 254: str = "Land-to-Mobile Directory Number access"; break; - case 255: str = "Roamer port access"; break; - default: - if ((value >= 1) && (value <= 127)) { str = "Reserved for controlling system assignment"; } - else if ((value >= 128) && (value <= 160)) { str = "Reserved for protocol extension, treat as Land-to-Mobile Directory Number access"; } - else { str = "Reserved"; } - break; - } +static void +dissect_ansi_map_channeldata(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + int offset = 0; + proto_item *item; + proto_tree *subtree; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_mscid); - EXTRANEOUS_DATA_CHECK(len, 1); -} + /* SAT Color Code (SCC) (octet 1, bits H and G) */ + proto_tree_add_item(subtree, hf_ansi_map_channeldata_scc, tvb, offset, 1, FALSE); + /* Discontinuous Transmission Mode (DTX) (octet 1, bits E and D) */ + proto_tree_add_item(subtree, hf_ansi_map_channeldata_dtx, tvb, offset, 1, FALSE); + /* Voice Mobile Attenuation Code (VMAC) (octet 1, bits A - C)*/ + proto_tree_add_item(subtree, hf_ansi_map_channeldata_vmac, tvb, offset, 1, FALSE); -static void -param_term_treat(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; + offset++; + /* Channel Number (CHNO) ( octet 2 and 3 ) */ + proto_tree_add_item(subtree, hf_ansi_map_channeldata_chno, tvb, offset, 2, FALSE); - saved_offset = asn1->offset; +} - asn1_int32_value_decode(asn1, 1, &value); +/* 6.5.2.50 ConfidentialityModes */ +/* Updated with N.S0008-0 v 1.0*/ +/* Voice Privacy (VP) Confidentiality Status (octet 1, bit A) */ - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "MS Termination"; break; - case 2: str = "Voice Mail Storage"; break; - case 3: str = "Voice Mail Retrieval"; break; - case 4: str = "Dialogue Termination"; break; - default: - if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as Unrecognized parameter value"; } - else { str = "Reserved for protocol extension, treat as Unrecognized parameter value"; } - break; - } +static const true_false_string ansi_map_ConfidentialityModes_bool_val = { + "On", + "Off" +}; +static void +dissect_ansi_map_confidentialitymodes(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + int offset = 0; + proto_item *item; + proto_tree *subtree; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_mscid); + + /* DataPrivacy (DP) Confidentiality Status (octet 1, bit C) */ + proto_tree_add_item(subtree, hf_ansi_map_ConfidentialityModes_dp, tvb, offset, 1, FALSE); + /* Signaling Message Encryption (SE) Confidentiality Status (octet 1, bit B) */ + proto_tree_add_item(subtree, hf_ansi_map_ConfidentialityModes_se, tvb, offset, 1, FALSE); + /* Voice Privacy (VP) Confidentiality Status (octet 1, bit A) */ + proto_tree_add_item(subtree, hf_ansi_map_ConfidentialityModes_vp, tvb, offset, 1, FALSE); - EXTRANEOUS_DATA_CHECK(len, 1); } -static void -param_term_trig(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +/* 6.5.2.51 ControlChannelData */ - SHORT_DATA_CHECK(len, 2); +/* Digital Color Code (DCC) (octet 1, bit H and G) */ +/* Control Mobile Attenuation Code (CMAC) (octet 1, bit A - C) */ +/* Channel Number (CHNO) ( octet 2 and 3 ) */ +/* Supplementary Digital Color Codes (SDCC1 and SDCC2) */ +/* SDCC1 ( octet 4, bit D and C )*/ +/* SDCC2 ( octet 4, bit A and B )*/ - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - switch ((value & 0xc0) >> 6) - { - case 0: str = "No Answer Call"; break; - case 1: str = "No Answer Trigger"; break; - case 2: str = "No Answer Leg"; break; - case 3: str = "Reserved"; break; - } +/* 6.5.2.52 CountUpdateReport */ +static const value_string ansi_map_CountUpdateReport_vals[] = { + { 0, "Class I"}, + { 1, "Class II"}, + { 2, "Class III"}, + { 3, "Reserved"}, + { 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : No Answer (NA), %s", - bigbuf, - str); +/* 6.5.2.53 DeniedAuthorizationPeriod */ +/* Period (octet 1) */ +static const value_string ansi_map_deniedauthorizationperiod_period_vals[] = { + { 0, "Not used"}, + { 1, "Per Call. Re-authorization should be attempted on the next call attempt"}, + { 2, "Hours"}, + { 3, "Days"}, + { 4, "Weeks"}, + { 5, "Per Agreement"}, + { 6, "Reserved"}, + { 7, "Number of calls. Re-authorization should be attempted after this number of (rejected) call attempts"}, + { 8, "Minutes"}, + { 0, NULL } +}; +/* Value (octet 2) +Number of minutes hours, days, weeks, or +number of calls (as per Period). If Period +indicates anything else the Value is set to zero +on sending and ignored on receipt. +*/ - switch ((value & 0x30) >> 4) - { - case 0: str = "No Page Response Call"; break; - case 1: str = "No Page Response Trigger"; break; - case 2: str = "No Page Response Leg"; break; - case 3: str = "Reserved"; break; - } +static void +dissect_ansi_map_deniedauthorizationperiod(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - other_decode_bitfield_value(bigbuf, value, 0x30, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : No Page Response (NPR), %s", - bigbuf, - str); + int offset = 0; + proto_item *item; + proto_tree *subtree; - switch ((value & 0x0c) >> 2) - { - case 0: str = "Failed Call"; break; - case 1: str = "Routing Failure Trigger"; break; - case 2: str = "Failed Leg"; break; - case 3: str = "Reserved"; break; - } + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_billingid); + proto_tree_add_item(subtree, hf_ansi_map_deniedauthorizationperiod_period, tvb, offset, 1, FALSE); + offset++; + proto_tree_add_item(subtree, hf_ansi_map_value, tvb, offset, 1, FALSE); - other_decode_bitfield_value(bigbuf, value, 0x0c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Routing Failure (RF), %s", - bigbuf, - str); +} - switch (value & 0x03) - { - case 0: str = "Busy Call"; break; - case 1: str = "Busy Trigger"; break; - case 2: str = "Busy Leg"; break; - case 3: str = "Reserved"; break; - } - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Busy, %s", - bigbuf, - str); +/* 6.5.2.57 DigitCollectionControl */ +/* TODO Add decoding here */ - saved_offset = asn1->offset; +/* 6.5.2.64 ExtendedMSCID */ +static const value_string ansi_map_msc_type_vals[] = { + { 0, "Not specified"}, + { 1, "Serving MSC"}, + { 2, "Home MSC"}, + { 3, "Gateway MSC"}, + { 4, "HLR"}, + { 5, "VLR"}, + { 6, "EIR (reserved)"}, + { 7, "AC"}, + { 8, "Border MSC"}, + { 9, "Originating MSC"}, + { 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static void +dissect_ansi_map_extendedmscid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - other_decode_bitfield_value(bigbuf, value, 0xfe, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); + int offset = 0; + proto_item *item; + proto_tree *subtree; - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : None Reachable (NR), %s", - bigbuf, - (value & 0x01) ? "Group Not Reachable" : "Member Not Reachable"); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_billingid); + /* Type (octet 1) */ + proto_tree_add_item(subtree, hf_ansi_map_msc_type, tvb, offset, 1, FALSE); + offset++; + proto_tree_add_item(subtree, hf_ansi_map_MarketID, tvb, offset, 2, FALSE); + offset = offset + 2; + proto_tree_add_item(subtree, hf_ansi_map_swno, tvb, offset, 1, FALSE); - EXTRANEOUS_DATA_CHECK(len, 2); } - +/* 6.5.2.65 ExtendedSystemMyTypeCode */ static void -param_aav(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; +dissect_ansi_map_extendedsystemmytypecode(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - saved_offset = asn1->offset; + int offset = 0; + proto_item *item; + proto_tree *subtree; - asn1_int32_value_decode(asn1, 1, &value); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_billingid); + /* Type (octet 1) */ + proto_tree_add_item(subtree, hf_ansi_map_msc_type, tvb, offset, 1, FALSE); + offset++; + offset = dissect_ansi_map_SystemMyTypeCode(TRUE, tvb, offset, pinfo, subtree, hf_ansi_map_systemMyTypeCode); +} + + +/* 6.5.2.68 GeographicAuthorization */ +/* Geographic Authorization (octet 1) */ +static const value_string ansi_map_GeographicAuthorization_vals[] = { + { 0, "Not used"}, + { 1, "Authorized for all MarketIDs served by the VLR"}, + { 2, "Authorized for this MarketID only"}, + { 3, "Authorized for this MarketID and Switch Number only"}, + { 4, "Authorized for this LocationAreaID within a MarketID only"}, + { 5, "VLR"}, + { 6, "EIR (reserved)"}, + { 7, "AC"}, + { 8, "Border MSC"}, + { 9, "Originating MSC"}, + { 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Value as used in the CAVE algorithm (%u)", - value); +/* 6.5.2.71 HandoffState */ +/* Party Involved (PI) (octet 1, bit A) */ +static const true_false_string ansi_map_HandoffState_pi_bool_val = { + "Terminator is handing off", + "Originator is handing off" +}; +static void +dissect_ansi_map_handoffstate(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - EXTRANEOUS_DATA_CHECK(len, 1); + int offset = 0; + proto_item *item; + proto_tree *subtree; + + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_billingid); + /* Party Involved (PI) (octet 1, bit A) */ + proto_tree_add_item(subtree, hf_ansi_map_handoffstate_pi, tvb, offset, 1, FALSE); } +/* 6.5.2.72 InterMSCCircuitID */ +/* Trunk Member Number (M) Octet2 */ static void -param_ann_code(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +dissect_ansi_map_intermsccircuitid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - SHORT_DATA_CHECK(len, 3); + int offset = 0; + proto_item *item; + proto_tree *subtree; - saved_offset = asn1->offset; + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_billingid); + /* Trunk Group Number (G) Octet 1 */ + proto_tree_add_item(subtree, hf_ansi_map_tgn, tvb, offset, 1, FALSE); + offset++; + /* Trunk Member Number (M) Octet2 */ + proto_tree_add_item(subtree, hf_ansi_map_tmn, tvb, offset, 1, FALSE); +} + +/* 6.5.2.78 MessageWaitingNotificationCount */ +/* Type of messages (octet 1) */ +static const value_string ansi_map_MessageWaitingNotificationCount_type_vals[] = { + { 0, "Voice messages"}, + { 1, "Short Message Services (SMS) messages"}, + { 2, "Group 3 (G3) Fax messages"}, + { 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static void +dissect_ansi_map_messagewaitingnotificationcount(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - switch (value) - { - case 0: str = "Dialtone"; break; - case 1: str = "Ringback or Audible Alerting"; break; - case 2: str = "Intercept or Mobile Reorder"; break; - case 3: str = "Congestion or Reorder"; break; - case 4: str = "Busy"; break; - case 5: str = "Confirmation"; break; - case 6: str = "Answer"; break; - case 7: str = "Call Waiting"; break; - case 8: str = "Offhook"; break; - case 17: str = "Recall Dial"; break; - case 18: str = "Barge In"; break; - case 20: str = "PPC Insufficient"; break; - case 21: str = "PPC Warning 1"; break; - case 22: str = "PPC Warning 2"; break; - case 23: str = "PPC Warning 3"; break; - case 24: str = "PPC Disconnect"; break; - case 25: str = "PPC Redirect"; break; - case 63: str = "Tones Off"; break; - case 192: str = "Pip"; break; - case 193: str = "Abbreviated Intercept"; break; - case 194: str = "Abbreviated Congestion"; break; - case 195: str = "Warning"; break; - case 196: str = "Denial Tone Burst"; break; - case 197: str = "Dial Tone Burst"; break; - case 250: str = "Incoming Additional Call"; break; - case 251: str = "Priority Additional Call"; break; - default: - str = "Reserved, treat as Tones Off"; - break; - } + int offset = 0; + proto_item *item; + proto_tree *subtree; - other_decode_bitfield_value(bigbuf, value, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Tone %u, %s", - bigbuf, - value, - str); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_billingid); + /* Type of messages (octet 1) */ + proto_tree_add_item(subtree, hf_ansi_map_messagewaitingnotificationcount_tom, tvb, offset, 1, FALSE); + offset++; + /* Number of Messages Waiting (octet 2) */ + proto_tree_add_item(subtree, hf_ansi_map_messagewaitingnotificationcount_no_mw, tvb, offset, 1, FALSE); - saved_offset = asn1->offset; +} - asn1_int32_value_decode(asn1, 1, &value); +/* 6.5.2.79 MessageWaitingNotificationType */ +/* Pip Tone (PT) (octet 1, bit A) */ +static const true_false_string ansi_map_MessageWaitingNotificationType_pt_bool_val = { + "Pip Tone (PT) notification is required", + "Pip Tone (PT) notification is not authorized or no notification is required" +}; +/* Alert Pip Tone (APT) (octet 1, bit B) */ +static const true_false_string ansi_map_MessageWaitingNotificationType_apt_bool_val = { + "Alert Pip Tone (APT) notification is required", + "Alert Pip Tone (APT) notification is not authorized or notification is not required" +}; +/* Message Waiting Indication (MWI) (octet 1, bits C and D) */ +static const value_string ansi_map_MessageWaitingNotificationType_mwi_vals[] = { + { 0, "No MWI. Message Waiting Indication (MWI) notification is not authorized or notification is not required"}, + { 1, "Reserved"}, + { 2, "MWI On. Message Waiting Indication (MWI) notification is required. Messages waiting"}, + { 3, "MWI Off. Message Waiting Indication (MWI) notification is required. No messages waiting"}, + { 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +static void +dissect_ansi_map_messagewaitingnotificationtype(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - switch (value & 0x0f) - { - case 0: str = "Concurrent"; break; - case 1: str = "Sequential"; break; - default: - if ((value >= 2) && (value <= 7)) { str = "Reserved, treat as Concurrent"; } - else { str = "Reserved, treat as Sequential"; } - break; - } + int offset = 0; + proto_item *item; + proto_tree *subtree; - other_decode_bitfield_value(bigbuf, value, 0x0f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Class %s", - bigbuf, - str); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_billingid); + + /* Message Waiting Indication (MWI) (octet 1, bits C and D) */ + proto_tree_add_item(subtree, hf_ansi_map_messagewaitingnotificationtype_mwi, tvb, offset, 1, FALSE); + /* Alert Pip Tone (APT) (octet 1, bit B) */ + proto_tree_add_item(subtree, hf_ansi_map_messagewaitingnotificationtype_apt, tvb, offset, 1, FALSE); + /* Pip Tone (PT) (octet 1, bit A) */ + proto_tree_add_item(subtree, hf_ansi_map_messagewaitingnotificationtype_pt, tvb, offset, 1, FALSE); +} - saved_offset = asn1->offset; +/* 6.5.2.81 MobileIdentificationNumber */ - asn1_int32_value_decode(asn1, 1, &value); +/* 6.5.2.82 MSCID */ - switch (value) - { - case 0: str = "None"; break; - case 1: str = "Unauthorized User"; break; - case 2: str = "Invalid ESN"; break; - case 3: str = "Unauthorized Mobile"; break; - case 4: str = "Suspended Origination"; break; - case 5: str = "Origination Denied"; break; - case 6: str = "Service Area Denial"; break; - case 16: str = "Partial Dial"; break; - case 17: str = "Require 1 Plus"; break; - case 18: str = "Require 1 Plus NPA"; break; - case 19: str = "Require 0 Plus"; break; - case 20: str = "Require 0 Plus NPA"; break; - case 21: str = "Deny 1 Plus"; break; - case 22: str = "Unsupported 10 plus"; break; - case 23: str = "Deny 10 plus"; break; - case 24: str = "Unsupported 10 XXX"; break; - case 25: str = "Deny 10 XXX"; break; - case 26: str = "Deny 10 XXX Locally"; break; - case 27: str = "Require 10 Plus"; break; - case 28: str = "Require NPA"; break; - case 29: str = "Deny Toll Origination"; break; - case 30: str = "Deny International Origination"; break; - case 31: str = "Deny 0 Minus"; break; - case 48: str = "Deny Number"; break; - case 49: str = "Alternate Operator Services"; break; - case 64: str = "No Circuit or All Circuits Busy or FacilityProblem"; break; - case 65: str = "Overload"; break; - case 66: str = "Internal Office Failure"; break; - case 67: str = "No Wink Received"; break; - case 68: str = "Interoffice Link Failure"; break; - case 69: str = "Vacant"; break; - case 70: str = "Invalid Prefix or Invalid Access Code"; break; - case 71: str = "Other Dialing Irregularity"; break; - case 80: str = "Vacant Number or Disconnected Number"; break; - case 81: str = "Deny Termination"; break; - case 82: str = "Suspended Termination"; break; - case 83: str = "Changed Number"; break; - case 84: str = "Inaccessible Subscriber"; break; - case 85: str = "Deny Incoming Toll"; break; - case 86: str = "Roamer Access Screening"; break; - case 87: str = "Refuse Call"; break; - case 88: str = "Redirect Call"; break; - case 89: str = "No Page Response"; break; - case 90: str = "No Answer"; break; - case 96: str = "Roamer Intercept"; break; - case 97: str = "General Information"; break; - case 112: str = "Unrecognized Feature Code"; break; - case 113: str = "Unauthorized Feature Code"; break; - case 114: str = "Restricted Feature Code"; break; - case 115: str = "Invalid Modifier Digits"; break; - case 116: str = "Successful Feature Registration"; break; - case 117: str = "Successful Feature Deregistration"; break; - case 118: str = "Successful Feature Activation"; break; - case 119: str = "Successful Feature Deactivation"; break; - case 120: str = "Invalid Forward To Number"; break; - case 121: str = "Courtesy Call Warning"; break; - case 128: str = "Enter PIN Send Prompt"; break; - case 129: str = "Enter PIN Prompt"; break; - case 130: str = "Reenter PIN Send Prompt"; break; - case 131: str = "Reenter PIN Prompt"; break; - case 132: str = "Enter Old PIN Send Prompt"; break; - case 133: str = "Enter Old PIN Prompt"; break; - case 134: str = "Enter New PIN Send Prompt"; break; - case 135: str = "Enter New PIN Prompt"; break; - case 136: str = "Reenter New PIN Send Prompt"; break; - case 137: str = "Reenter New PIN Prompt"; break; - case 138: str = "Enter Password Prompt"; break; - case 139: str = "Enter Directory Number Prompt"; break; - case 140: str = "Reenter Directory Number Prompt"; break; - case 141: str = "Enter Feature Code Prompt"; break; - case 142: str = "Enter Credit Card Number Prompt"; break; - case 143: str = "Enter Destination Number Prompt"; break; - case 152: str = "PPC Insufficient Account Balance"; break; - case 153: str = "PPC Five Minute Warning"; break; - case 154: str = "PPC Three Minute Warning"; break; - case 155: str = "PPC Two Minute Warning"; break; - case 156: str = "PPC One Minute Warning"; break; - case 157: str = "PPC Disconnect"; break; - case 158: str = "PPC Redirect"; break; - default: - str = "Reserved, treat as None"; - break; - } +static void +dissect_ansi_map_mscid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + int offset = 0; + proto_item *item; + proto_tree *subtree; - other_decode_bitfield_value(bigbuf, value, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Standard Announcement, %s", - bigbuf, - str); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_mscid); - if (len == 3) return; + proto_tree_add_item(subtree, hf_ansi_map_MarketID, tvb, offset, 2, FALSE); + offset = offset + 2; + proto_tree_add_item(subtree, hf_ansi_map_swno, tvb, offset, 1, FALSE); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +/* 6.5.2.84 MSLocation */ +static void +dissect_ansi_map_mslocation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + int offset = 0; + proto_item *item; + proto_tree *subtree; - other_decode_bitfield_value(bigbuf, value, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Custom Announcement %u", - bigbuf, - value); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_mscid); - EXTRANEOUS_DATA_CHECK(len, 4); -} + /* Latitude in tenths of a second octet 1 - 3 */ + proto_tree_add_item(subtree, hf_ansi_map_mslocation_lat, tvb, offset, 3, FALSE); + offset = offset + 3; + /* Longitude in tenths of a second octet 4 - 6 */ + proto_tree_add_item(subtree, hf_ansi_map_mslocation_long, tvb, offset, 3, FALSE); + offset = offset + 3; + /* Resolution in units of 1 foot octet 7, octet 8 optional */ + proto_tree_add_item(subtree, hf_ansi_map_mslocation_res, tvb, offset, -1, FALSE); +} +/* 6.5.2.85 NAMPSCallMode */ static void -param_alert_res(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +dissect_ansi_map_nampscallmode(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + int offset = 0; + proto_item *item; + proto_tree *subtree; - saved_offset = asn1->offset; + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_mscid); - asn1_int32_value_decode(asn1, 1, &value); + /* Call Mode (octet 1, bits A and B) */ + proto_tree_add_item(subtree, hf_ansi_map_nampscallmode_amps, tvb, offset, 1, FALSE); + proto_tree_add_item(subtree, hf_ansi_map_nampscallmode_namps, tvb, offset, 1, FALSE); +} - switch (value) - { - case 0: str = "Not specified"; break; - case 1: str = "Success"; break; - case 2: str = "Failure"; break; - case 3: str = "Denied"; break; - case 4: str = "Not attempted"; break; - case 5: str = "No page response"; break; - case 6: str = "Busy"; break; - default: - str = "Reserved, treat as Not specified"; - break; - } +/* 6.5.2.86 NAMPSChannelData */ +/* Narrow Analog Voice Channel Assignment (NAVCA) (octet 1, bits A and B) */ +static const value_string ansi_map_NAMPSChannelData_navca_vals[] = { + { 0, "Wide. 30 kHz AMPS voice channel"}, + { 1, "Upper. 10 kHz NAMPS voice channel"}, + { 2, "Middle. 10 kHz NAMPS voice channel"}, + { 3, "Lower. 10 kHz NAMPS voice channel"}, + { 0, NULL } +}; +/* Color Code Indicator (CCIndicator) (octet 1, bits C, D, and E) */ +static const value_string ansi_map_NAMPSChannelData_ccinidicator_vals[] = { + { 0, "ChannelData parameter SCC field applies"}, + { 1, "Digital SAT Color Code 1 (ignore SCC field)"}, + { 2, "Digital SAT Color Code 2 (ignore SCC field)"}, + { 3, "Digital SAT Color Code 3 (ignore SCC field)"}, + { 4, "Digital SAT Color Code 4 (ignore SCC field)"}, + { 5, "Digital SAT Color Code 5 (ignore SCC field)"}, + { 6, "Digital SAT Color Code 6 (ignore SCC field)"}, + { 7, "Digital SAT Color Code 7 (ignore SCC field)"}, + { 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); - EXTRANEOUS_DATA_CHECK(len, 1); -} static void -param_conf_call_ind(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +dissect_ansi_map_nampschanneldata(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + int offset = 0; + proto_item *item; + proto_tree *subtree; - saved_offset = asn1->offset; + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_mscid); - asn1_int32_value_decode(asn1, 1, &value); + /* Color Code Indicator (CCIndicator) (octet 1, bits C, D, and E) */ + proto_tree_add_item(subtree, hf_ansi_map_nampschanneldata_CCIndicator, tvb, offset, 1, FALSE); + /* Narrow Analog Voice Channel Assignment (NAVCA) (octet 1, bits A and B) */ + proto_tree_add_item(subtree, hf_ansi_map_nampschanneldata_navca, tvb, offset, 1, FALSE); - switch (value) - { - case 0: str = ", Not specified"; break; - case 255: str = ", Unlimited number of conferees"; break; - default: - str = ""; - break; - } +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Maximum Number of Conferees, (%u)%s", - value, - str); +/* 6.5.2.88 OneTimeFeatureIndicator */ +/* updated with N.S0012 */ +/* Call Waiting for Future Incoming Call (CWFI) (octet 1, bits A and B) */ +/* Call Waiting for Incoming Call (CWIC) (octet 1, bits C and D) */ - EXTRANEOUS_DATA_CHECK(len, 1); -} +static const value_string ansi_map_onetimefeatureindicator_cw_vals[] = { + { 0, "Ignore"}, + { 1, "No CW"}, + { 2, "Normal CW"}, + { 3, "Priority CW"}, + { 0, NULL } +}; +/* MessageWaitingNotification (MWN) (octet 1, bits E and F) */ +static const value_string ansi_map_onetimefeatureindicator_mwn_vals[] = { + { 0, "Ignore"}, + { 1, "Pip Tone Inactive"}, + { 2, "Pip Tone Active"}, + { 3, "Reserved"}, + { 0, NULL } +}; +/* Calling Number Identification Restriction (CNIR) (octet 1, bits G and H)*/ +static const value_string ansi_map_onetimefeatureindicator_cnir_vals[] = { + { 0, "Ignore"}, + { 1, "CNIR Inactive"}, + { 2, "CNIR Active"}, + { 3, "Reserved"}, + { 0, NULL } +}; -static void -param_count_upd_report(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +/* Priority Access and Channel Assignment (PACA) (octet 2, bits A and B)*/ +static const value_string ansi_map_onetimefeatureindicator_paca_vals[] = { + { 0, "Ignore"}, + { 1, "PACA Demand Inactive"}, + { 2, "PACA Demand Activated"}, + { 3, "Reserved"}, + { 0, NULL } +}; - saved_offset = asn1->offset; +/* Flash Privileges (Flash) (octet 2, bits C and D) */ +static const value_string ansi_map_onetimefeatureindicator_flash_vals[] = { + { 0, "Ignore"}, + { 1, "Flash Inactive"}, + { 2, "Flash Active"}, + { 3, "Reserved"}, + { 0, NULL } +}; +/* Calling Name Restriction (CNAR) (octet 2, bits E and F) */ +static const value_string ansi_map_onetimefeatureindicator_cnar_vals[] = { + { 0, "Ignore"}, + { 1, "Presentation Allowed"}, + { 2, "Presentation Restricted."}, + { 3, "Blocking Toggle"}, + { 0, NULL } +}; +static void +dissect_ansi_map_onetimefeatureindicator(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + int offset = 0; + proto_item *item; + proto_tree *subtree; - asn1_int32_value_decode(asn1, 1, &value); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_mscid); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "COUNT Update not attempted"; break; - case 2: str = "COUNT Update no response"; break; - case 3: str = "COUNT Update successful"; break; - default: - if ((value >= 4) && (value <= 223)) { str = "Reserved, treat as COUNT Update not attempted"; } - else { str = "Reserved for protocol extension, treat as COUNT Update not attempted"; } - break; - } + /* Calling Number Identification Restriction (CNIR) (octet 1, bits G and H)*/ + /* MessageWaitingNotification (MWN) (octet 1, bits E and F) */ + /* Call Waiting for Incoming Call (CWIC) (octet 1, bits C and D) */ + /* Call Waiting for Future Incoming Call (CWFI) (octet 1, bits A and B) */ + offset++; + /* Calling Name Restriction (CNAR) (octet 2, bits E and F) */ + /* Flash Privileges (Flash) (octet 2, bits C and D) */ + /* Priority Access and Channel Assignment (PACA) (octet 2, bits A and B)*/ - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); - EXTRANEOUS_DATA_CHECK(len, 1); } -static void -param_ssd_upd_report(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +/* 6.5.2.90 OriginationTriggers */ +/* All Origination (All) (octet 1, bit A) */ +static const true_false_string ansi_map_originationtriggers_all_bool_val = { + "Launch an OriginationRequest for any call attempt. This overrides all other values", + "Trigger is not active" +}; - saved_offset = asn1->offset; +/* Local (octet 1, bit B) */ +static const true_false_string ansi_map_originationtriggers_local_bool_val = { + "Launch an OriginationRequest for any local call attempt", + "Trigger is not active" +}; - asn1_int32_value_decode(asn1, 1, &value); +/* Intra-LATA Toll (ILATA) (octet 1, bit C) */ +static const true_false_string ansi_map_originationtriggers_ilata_bool_val = { + "Launch an OriginationRequest for any intra-LATA call attempt", + "Trigger is not active" +}; +/* Inter-LATA Toll (OLATA) (octet 1, bit D) */ +static const true_false_string ansi_map_originationtriggers_olata_bool_val = { + "Launch an OriginationRequest for any inter-LATA toll call attempt", + "Trigger is not active" +}; +/* International (Int'l ) (octet 1, bit E) */ +static const true_false_string ansi_map_originationtriggers_int_bool_val = { + "Launch an OriginationRequest for any international call attempt", + "Trigger is not active" +}; +/* World Zone (WZ) (octet 1, bit F) */ +static const true_false_string ansi_map_originationtriggers_wz_bool_val = { + "Launch an OriginationRequest for any call attempt outside of the current World Zone (as defined in ITU-T Rec. E.164)", + "Trigger is not active" +}; - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "SSD Update not attempted"; break; - case 2: str = "SSD Update no response"; break; - case 3: str = "SSD Update successful"; break; - case 4: str = "SSD Update failed"; break; - default: - if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as SSD Update not attempted"; } - else { str = "Reserved for protocol extension, treat as SSD Update not attempted"; } - break; - } +/* Unrecognized Number (Unrec) (octet 1, bit G) */ +static const true_false_string ansi_map_originationtriggers_unrec_bool_val = { + "Launch an OriginationRequest for any call attempt to an unrecognized number", + "Trigger is not active" +}; +/* Revertive Call (RvtC) (octet 1, bit H)*/ +static const true_false_string ansi_map_originationtriggers_rvtc_bool_val = { + "Launch an OriginationRequest for any Revertive Call attempt", + "Trigger is not active" +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +/* Star (octet 2, bit A) */ +static const true_false_string ansi_map_originationtriggers_star_bool_val = { + "Launch an OriginationRequest for any number beginning with a Star '*' digit", + "Trigger is not active" +}; - EXTRANEOUS_DATA_CHECK(len, 1); -} +/* Double Star (DS) (octet 2, bit B) */ +static const true_false_string ansi_map_originationtriggers_ds_bool_val = { + "Launch an OriginationRequest for any number beginning with two Star '**' digits", + "Trigger is not active" +}; +/* Pound (octet 2, bit C) */ +static const true_false_string ansi_map_originationtriggers_pound_bool_val = { + "Launch an OriginationRequest for any number beginning with a Pound '#' digit", + "Trigger is not active" +}; +/* Double Pound (DP) (octet 2, bit D) */ +static const true_false_string ansi_map_originationtriggers_dp_bool_val = { + "Launch an OriginationRequest for any number beginning with two Pound '##' digits", + "Trigger is not active" +}; +/* Prior Agreement (PA) (octet 2, bit E) */ +static const true_false_string ansi_map_originationtriggers_pa_bool_val = { + "Launch an OriginationRequest for any number matching a criteria of a prior agreement", + "Trigger is not active" +}; -static void -param_cond_den_reason(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +/* No digits (octet 3, bit A) */ +static const true_false_string ansi_map_originationtriggers_nodig_bool_val = { + "Launch an OriginationRequest for any call attempt with no digits", + "Trigger is not active" +}; - EXACT_DATA_CHECK(len, 1); +/* 1 digit (octet 3, bit B) */ +static const true_false_string ansi_map_originationtriggers_onedig_bool_val = { + "Launch an OriginationRequest for any call attempt with 1 digit", + "Trigger is not active" +}; +/* 1 digit (octet 3, bit C) */ +static const true_false_string ansi_map_originationtriggers_twodig_bool_val = { + "Launch an OriginationRequest for any call attempt with 2 digits", + "Trigger is not active" +}; +/* 1 digit (octet 3, bit D) */ +static const true_false_string ansi_map_originationtriggers_threedig_bool_val = { + "Launch an OriginationRequest for any call attempt with 3 digits", + "Trigger is not active" +}; +/* 1 digit (octet 3, bit E) */ +static const true_false_string ansi_map_originationtriggers_fourdig_bool_val = { + "Launch an OriginationRequest for any call attempt with 4 digits", + "Trigger is not active" +}; +/* 1 digit (octet 3, bit F) */ +static const true_false_string ansi_map_originationtriggers_fivedig_bool_val = { + "Launch an OriginationRequest for any call attempt with 5 digits", + "Trigger is not active" +}; +/* 1 digit (octet 3, bit G) */ +static const true_false_string ansi_map_originationtriggers_sixdig_bool_val = { + "Launch an OriginationRequest for any call attempt with 6 digits", + "Trigger is not active" +}; +/* 1 digit (octet 3, bit H) */ +static const true_false_string ansi_map_originationtriggers_sevendig_bool_val = { + "Launch an OriginationRequest for any call attempt with 7 digits", + "Trigger is not active" +}; +/* 1 digit (octet 4, bit A) */ +static const true_false_string ansi_map_originationtriggers_eightdig_bool_val = { + "Launch an OriginationRequest for any call attempt with 8 digits", + "Trigger is not active" +}; +/* 1 digit (octet 4, bit B) */ +static const true_false_string ansi_map_originationtriggers_ninedig_bool_val = { + "Launch an OriginationRequest for any call attempt with 9 digits", + "Trigger is not active" +}; +/* 1 digit (octet 4, bit C) */ +static const true_false_string ansi_map_originationtriggers_tendig_bool_val = { + "Launch an OriginationRequest for any call attempt with 10 digits", + "Trigger is not active" +}; +/* 1 digit (octet 4, bit D) */ +static const true_false_string ansi_map_originationtriggers_elevendig_bool_val = { + "Launch an OriginationRequest for any call attempt with 11 digits", + "Trigger is not active" +}; +/* 1 digit (octet 4, bit E) */ +static const true_false_string ansi_map_originationtriggers_thwelvdig_bool_val = { + "Launch an OriginationRequest for any call attempt with 12 digits", + "Trigger is not active" +}; +/* 1 digit (octet 4, bit F) */ +static const true_false_string ansi_map_originationtriggers_thirteendig_bool_val = { + "Launch an OriginationRequest for any call attempt with 13 digits", + "Trigger is not active" +}; +/* 1 digit (octet 4, bit G) */ +static const true_false_string ansi_map_originationtriggers_fourteendig_bool_val = { + "Launch an OriginationRequest for any call attempt with 14 digits", + "Trigger is not active" +}; +/* 1 digit (octet 4, bit H) */ +static const true_false_string ansi_map_originationtriggers_fifteendig_bool_val = { + "Launch an OriginationRequest for any call attempt with 15 digits", + "Trigger is not active" +}; - saved_offset = asn1->offset; +static void +dissect_ansi_map_originationtriggers(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - asn1_int32_value_decode(asn1, 1, &value); + int offset = 0; + proto_item *item; + proto_tree *subtree; - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Waitable (i.e., Call Waiting is possible)"; break; - default: - if ((value >= 2) && (value <= 223)) { str = "Reserved, treat as Waitable"; } - else { str = "Reserved for protocol extension, treat as Waitable"; } - break; - } + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_originationtriggers); + + /* Revertive Call (RvtC) (octet 1, bit H)*/ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_rvtc, tvb, offset, 1, FALSE); + /* Unrecognized Number (Unrec) (octet 1, bit G) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_unrec, tvb, offset, 1, FALSE); + /* World Zone (WZ) (octet 1, bit F) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_wz, tvb, offset, 1, FALSE); + /* International (Int'l ) (octet 1, bit E) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_int, tvb, offset, 1, FALSE); + /* Inter-LATA Toll (OLATA) (octet 1, bit D) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_olata, tvb, offset, 1, FALSE); + /* Intra-LATA Toll (ILATA) (octet 1, bit C) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_ilata, tvb, offset, 1, FALSE); + /* Local (octet 1, bit B) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_local, tvb, offset, 1, FALSE); + /* All Origination (All) (octet 1, bit A) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_all, tvb, offset, 1, FALSE); + offset++; + + /*Prior Agreement (PA) (octet 2, bit E) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_pa, tvb, offset, 1, FALSE); + /* Double Pound (DP) (octet 2, bit D) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_dp, tvb, offset, 1, FALSE); + /* Pound (octet 2, bit C) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_pound, tvb, offset, 1, FALSE); + /* Double Star (DS) (octet 2, bit B) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_ds, tvb, offset, 1, FALSE); + /* Star (octet 2, bit A) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_star, tvb, offset, 1, FALSE); + offset++; + + /* 7 digit (octet 3, bit H) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_sevendig, tvb, offset, 1, FALSE); + /* 6 digit (octet 3, bit G) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_sixdig, tvb, offset, 1, FALSE); + /* 5 digit (octet 3, bit F) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_fivedig, tvb, offset, 1, FALSE); + /* 4 digit (octet 3, bit E) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_fourdig, tvb, offset, 1, FALSE); + /* 3 digit (octet 3, bit D) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_threedig, tvb, offset, 1, FALSE); + /* 2 digit (octet 3, bit C) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_twodig, tvb, offset, 1, FALSE); + /* 1 digit (octet 3, bit B) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_onedig, tvb, offset, 1, FALSE); + /* No digits (octet 3, bit A) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_nodig, tvb, offset, 1, FALSE); + offset++; + + /* 15 digit (octet 4, bit H) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_fifteendig, tvb, offset, 1, FALSE); + /* 14 digit (octet 4, bit G) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_fourteendig, tvb, offset, 1, FALSE); + /* 13 digit (octet 4, bit F) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_thirteendig, tvb, offset, 1, FALSE); + /* 12 digit (octet 4, bit E) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_thwelvedig, tvb, offset, 1, FALSE); + /* 11 digit (octet 4, bit D) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_elevendig, tvb, offset, 1, FALSE); + /* 10 digit (octet 4, bit C) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_tendig, tvb, offset, 1, FALSE); + /* 9 digit (octet 4, bit B) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_ninedig, tvb, offset, 1, FALSE); + /* 8 digits (octet 4, bit A) */ + proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_eightdig, tvb, offset, 1, FALSE); + +} + +/* 6.5.2.91 PACAIndicator */ + +/* Permanent Activation (PA) (octet 1, bit A) */ +static const true_false_string ansi_map_pacaindicator_pa_bool_val = { + "PACA is permanently activated", + "PACA is not permanently activated" +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); -} +static const value_string ansi_map_PACA_Level_vals[] = { + { 0, "Not used"}, + { 1, "Priority Level. 1 This is the highest level"}, + { 2, "Priority Level 2"}, + { 3, "Priority Level 3"}, + { 4, "Priority Level 4"}, + { 5, "Priority Level 5"}, + { 6, "Priority Level 6"}, + { 7, "Priority Level 7"}, + { 8, "Priority Level 8"}, + { 8, "Priority Level 9"}, + { 10, "Priority Level 10"}, + { 11, "Priority Level 11"}, + { 12, "Priority Level 12"}, + { 13, "Priority Level 13"}, + { 14, "Priority Level 14"}, + { 15, "Priority Level 15"}, + { 0, NULL } +}; static void -param_den_auth_per(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +dissect_ansi_map_pacaindicator(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - SHORT_DATA_CHECK(len, 2); + int offset = 0; + proto_item *item; + proto_tree *subtree; - saved_offset = asn1->offset; + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_originationtriggers); + /* PACA Level (octet 1, bits B-E) */ + proto_tree_add_item(subtree, hf_ansi_map_PACA_Level, tvb, offset, 1, FALSE); + /* Permanent Activation (PA) (octet 1, bit A) */ + proto_tree_add_item(subtree, hf_ansi_map_pacaindicator_pa, tvb, offset, 1, FALSE); +} - asn1_int32_value_decode(asn1, 1, &value); +/* 6.5.2.92 PageIndicator */ +static const value_string ansi_map_PageIndicator_vals[] = { + { 0, "Not used"}, + { 1, "Page"}, + { 2, "Listen only"}, + { 0, NULL } +}; - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Per Call. Re-authorization should be attempted on the next call attempt"; break; - case 2: str = "Hours"; break; - case 3: str = "Days"; break; - case 4: str = "Weeks"; break; - case 5: str = "Per Agreement"; break; - case 6: str = "Reserved"; break; - case 7: str = "Number of calls. Re-authorization should be attempted after this number of (rejected) call attempts"; break; - case 8: str = "Minutes"; break; - default: - if ((value >= 9) && (value <= 223)) { str = "Reserved, treat as Per Call"; } - else { str = "Reserved for protocol extension, treat as Per Call"; } - break; - } +/* 6.5.2.93 PC_SSN */ +static void +dissect_ansi_map_pc_ssn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Period, %s", - str); + int offset = 0; + proto_item *item; + proto_tree *subtree; + guint8 b1,b2,b3,b4; + + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_billingid); + /* Type (octet 1) */ + proto_tree_add_item(subtree, hf_ansi_map_msc_type, tvb, offset, 1, FALSE); + offset++; + /* Point Code Member Number octet 2 */ + b1 = tvb_get_guint8(tvb,offset); + offset++; + /* Point Code Cluster Number octet 3 */ + b2 = tvb_get_guint8(tvb,offset); + offset++; + /* Point Code Network Number octet 4 */ + b3 = tvb_get_guint8(tvb,offset); + offset++; + /* Subsystem Number (SSN) octet 5 */ + b4 = tvb_get_guint8(tvb,offset); + proto_tree_add_text(subtree, tvb, offset-3, 4 , "Point Code %u-%u-%u SSN %u", + b3, b2, b1, b4); + +} +/* 6.5.2.94 PilotBillingID */ +static void +dissect_ansi_map_pilotbillingid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + + int offset = 0; + proto_item *item; + proto_tree *subtree; - saved_offset = asn1->offset; + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_billingid); + /* First Originating MarketID octet 1 and 2 */ + proto_tree_add_item(subtree, hf_ansi_map_MarketID, tvb, offset, 2, FALSE); + offset = offset + 2; + /* First Originating Switch Number octet 3*/ + proto_tree_add_item(subtree, hf_ansi_map_swno, tvb, offset, 1, FALSE); + offset++; + /* ID Number */ + proto_tree_add_item(subtree, hf_ansi_map_idno, tvb, offset, 3, FALSE); + offset = offset + 3; + proto_tree_add_item(subtree, hf_ansi_map_segcount, tvb, offset, 1, FALSE); + +} +/* 6.5.2.96 PreferredLanguageIndicator */ +static const value_string ansi_map_PreferredLanguageIndicator_vals[] = { + { 0, "Unspecified"}, + { 1, "English"}, + { 2, "French"}, + { 3, "Spanish"}, + { 4, "German"}, + { 5, "Portuguese"}, + { 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +/* 6.5.2.106 ReceivedSignalQuality */ +/* a. This octet is encoded the same as octet 1 in the SignalQuality parameter (see + 6.5.2.121). +*/ +/* 6.5.2.118 SetupResult */ +static const value_string ansi_map_SetupResult_vals[] = { + { 0, "Not used"}, + { 1, "Unsuccessful"}, + { 2, "Successful"}, + { 0, NULL } +}; +/* 6.5.2.121 SignalQuality */ +/* TODO */ - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Value %u", - value); +/* 6.5.2.122 SMS_AccessDeniedReason (TIA/EIA-41.5-D, page 5-256) + N.S0011-0 v 1.0 + */ +static const value_string ansi_map_SMS_AccessDeniedReason_vals[] = { + { 0, "Not used"}, + { 1, "Denied"}, + { 2, "Postponed"}, + { 3, "Unavailable"}, + { 4, "Invalid"}, + { 0, NULL } +}; - EXTRANEOUS_DATA_CHECK(len, 2); -} -static void -param_ho_state(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; +/* 6.5.2.125 SMS_CauseCode (TIA/EIA-41.5-D, page 5-262) + N.S0011-0 v 1.0 + */ +static const value_string ansi_map_SMS_CauseCode_vals[] = { + { 0, "Address vacant"}, + { 1, "Address translation failure"}, + { 2, "Network resource shortage"}, + { 3, "Network failure"}, + { 4, "Invalid Teleservice ID"}, + { 5, "Other network problem"}, + { 6, "Unsupported network interface"}, + { 32, "No page response"}, + { 33, "Destination busy"}, + { 34, "No acknowledgment"}, + { 35, "Destination resource shortage"}, + { 36, "SMS delivery postponed"}, + { 37, "Destination out of service"}, + { 38, "Destination no longer at this address"}, + { 39, "Other terminal problem"}, + { 64, "Radio interface resource shortage"}, + { 65, "Radio interface incompatibility"}, + { 66, "Other radio interface problem"}, + { 67, "Unsupported Base Station Capability"}, + { 96, "Encoding problem"}, + { 97, "Service origination denied"}, + { 98, "Service termination denied"}, + { 99, "Supplementary service not supported"}, + { 100, "Service not supported"}, + { 101, "Reserved"}, + { 102, "Missing expected parameter"}, + { 103, "Missing mandatory parameter"}, + { 104, "Unrecognized parameter value"}, + { 105, "Unexpected parameter value"}, + { 106, "User Data size error"}, + { 107, "Other general problems"}, + { 108, "Session not active"}, + { 0, NULL } +}; - saved_offset = asn1->offset; +/* 6.5.2.126 SMS_ChargeIndicator */ +/* SMS Charge Indicator (octet 1) */ +static const value_string ansi_map_SMS_ChargeIndicator_vals[] = { + { 0, "Not used"}, + { 1, "No charge"}, + { 2, "Charge original originator"}, + { 3, "Charge original destination"}, + { 0, NULL } +}; +/* 4 through 63 Reserved. Treat the same as value 1, No charge. + 64 through 127 Reserved. Treat the same as value 2, Charge original originator. + 128 through 223 Reserved. Treat the same as value 3, Charge original destination. + 224 through 255 Reserved for TIA/EIA-41 protocol extension. If unknown, treat the same as value 2, Charge + original originator. + */ + +/* 6.5.2.130 SMS_NotificationIndicator N.S0005-0 v 1.0*/ +static const value_string ansi_map_SMS_NotificationIndicator_vals[] = { + { 0, "Not used"}, + { 1, "Notify when available"}, + { 2, "Do not notify when available"}, + { 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +/* 6.5.2.136 SMS_OriginationRestrictions */ +/* DEFAULT (octet 1, bits A and B) */ - other_decode_bitfield_value(bigbuf, value, 0xfe, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +static const value_string ansi_map_SMS_OriginationRestrictions_default_vals[] = { + { 0, "Block all"}, + { 1, "Reserved"}, + { 1, "Allow specific"}, + { 1, "Allow all"}, + { 0, NULL } +}; +/* DIRECT (octet 1, bit C) */ +static const true_false_string ansi_map_SMS_OriginationRestrictions_direct_bool_val = { + "Allow Direct", + "Block Direct" +}; - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Party Involved (PI), %s", - bigbuf, - (value & 0x01) ? "Terminator is handing off" : "Originator is handing off"); +/* Force Message Center (FMC) (octet 1, bit D) */ +static const true_false_string ansi_map_SMS_OriginationRestrictions_fmc_bool_val = { + "Force Indirect", + "No effect" +}; - EXTRANEOUS_DATA_CHECK(len, 1); -} +/* 6.5.2.137 SMS_TeleserviceIdentifier */ +/* Updated with N.S0011-0 v 1.0 */ + +/* SMS Teleservice Identifier (octets 1 and 2) */ +static const value_string ansi_map_SMS_TeleserviceIdentifier_vals[] = { + { 0, "Not used"}, + { 1, "Reserved for maintenance"}, + { 2, "SSD Update no response"}, + { 3, "SSD Update successful"}, + { 4, "SSD Update failed"}, + { 4096, "AMPS Extended Protocol Enhanced Services" }, + { 4097, "CDMA Cellular Paging Teleservice" }, + { 4098, "CDMA Cellular Messaging Teleservice" }, + { 4099, "CDMA Voice Mail Notification" }, + { 32513, "TDMA Cellular Messaging Teleservice" }, + { 32520, "TDMA System Assisted Mobile Positioning through Satellite (SAMPS)" }, + { 32584, "TDMA Segmented System Assisted Mobile Positioning Service" }, + { 0, NULL } +}; +/* 6.5.2.140 SPINITriggers */ +/* All Origination (All) (octet 1, bit A) */ + +/* 6.5.2.142 SSDUpdateReport */ +static const value_string ansi_map_SSDUpdateReport_vals[] = { + { 0, "Not used"}, + { 4096, "AMPS Extended Protocol Enhanced Services"}, + { 4097, "CDMA Cellular Paging Teleservice"}, + { 4098, "CDMA Cellular Messaging Teleservice"}, + { 32513, "TDMA Cellular Messaging Teleservice"}, + { 32514, "TDMA Cellular Paging Teleservice (CPT-136)"}, + { 32515, "TDMA Over-the-Air Activation Teleservice (OATS)"}, + { 32516, "TDMA Over-the-Air Programming Teleservice (OPTS)"}, + { 32517, "TDMA General UDP Transport Service (GUTS)"}, + { 32576, "Reserved"}, + { 32577, "TDMA Segmented Cellular MessagingTeleservice"}, + { 32578, "TDMA Segmented Cellular Paging Teleservice"}, + { 32579, "TDMA Segmented Over-the-Air Activation Teleservice (OATS)"}, + { 32580, "TDMA Segmented Over-the-Air Programming Teleservice (OPTS)."}, + { 32581, "TDMA Segmented General UDP Transport Service (GUTS)"}, + { 32576, "Reserved"}, + { 0, NULL } +}; -static void -param_geo_auth(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +/* 6.5.2.143 StationClassMark */ - saved_offset = asn1->offset; +/* 6.5.2.144 SystemAccessData */ - asn1_int32_value_decode(asn1, 1, &value); +/* 6.5.2.146 SystemCapabilities */ +/* Updated in N.S0008-0 v 1.0 */ +static const true_false_string ansi_map_systemcapabilities_auth_bool_val = { + "Authentication parameters were requested on this system access (AUTH=1 in the OMT)", + "Authentication parameters were not requested on this system access (AUTH=0 in the OMT)." +}; - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Authorized for all Market IDs served by the VLR"; break; - case 2: str = "Authorized for this Market ID only"; break; - case 3: str = "Authorized for this Market ID and Switch Number only"; break; - case 4: str = "Authorized for this Location Area ID within a Market ID only"; break; - default: - if ((value >= 5) && (value <= 95)) { str = "Reserved, treat as Authorized for all Market IDs served by the VLR"; } - else if ((value >= 96) && (value <= 127)) { str = "Reserved for protocol extension, treat as Authorized for all Market IDs served by the VLR"; } - else if ((value >= 128) && (value <= 223)) { str = "Reserved, treat as Authorized for this Location Area ID within a Market ID only"; } - else { str = "Reserved for protocol extension, treat as Authorized for this Location Area ID within a Market ID only"; } - break; - } +static const true_false_string ansi_map_systemcapabilities_se_bool_val = { + "Signaling Message Encryption supported by the system", + "Signaling Message Encryption not supported by the system" +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static const true_false_string ansi_map_systemcapabilities_vp_bool_val = { + "Voice Privacy supported by the system", + "Voice Privacy not supported by the system" +}; - EXTRANEOUS_DATA_CHECK(len, 1); -} +static const true_false_string ansi_map_systemcapabilities_cave_bool_val = { + "System can execute the CAVE algorithm and share SSD for the indicated MS", + "System cannot execute the CAVE algorithm and cannot share SSD for the indicated MS" +}; + +static const true_false_string ansi_map_systemcapabilities_ssd_bool_val = { + "SSD is shared with the system for the indicated MS", + "SSD is not shared with the system for the indicated MS" +}; + +static const true_false_string ansi_map_systemcapabilities_dp_bool_val = { + "DP is supported by the system", + "DP is not supported by the system" +}; static void -param_mw_noti_type(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +dissect_ansi_map_systemcapabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - saved_offset = asn1->offset; + int offset = 0; + proto_item *item; + proto_tree *subtree; - asn1_int32_value_decode(asn1, 1, &value); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_systemcapabilities); + + proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_auth, tvb, offset, 1, FALSE); + proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_se, tvb, offset, 1, FALSE); + proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_vp, tvb, offset, 1, FALSE); + proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_cave, tvb, offset, 1, FALSE); + proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_ssd, tvb, offset, 1, FALSE); + proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_dp, tvb, offset, 1, FALSE); +} + +/* 6.5.2.151 TDMABurstIndicator */ +/* 6.5.2.152 TDMACallMode */ +/* 6.5.2.153 TDMAChannelData Updated in N.S0007-0 v 1.0*/ + +/* 6.5.2.155 TerminationAccessType */ +/* XXX Fix Me, Fill up the values or do special decoding? */ +static const value_string ansi_map_TerminationAccessType_vals[] = { + { 0, "Not used"}, + { 1, "Reserved for controlling system assignment (may be a trunk group identifier)."}, + /* 1 through 127 */ + { 127, "Reserved for controlling system assignment (may be a trunk group identifier)."}, + { 128, "Reserved for TIA/EIA-41 protocol extension. If unknown, treat the same as value 253, Land-to-Mobile Directory Number access"}, + /* 128 through 160 */ + { 160, "Reserved for TIA/EIA-41 protocol extension. If unknown, treat the same as value 253, Land-to-Mobile Directory Number access"}, + { 161, "Reserved for this Standard"}, + /* 161 through 251 */ + { 151, "Reserved for this Standard"}, + { 252, "Mobile-to-Mobile Directory Number access"}, + { 253, "Land-to-Mobile Directory Number access"}, + { 254, "Remote Feature Control port access"}, + { 255, "Roamer port access"}, + { 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +/* 6.5.2.158 TerminationTreatment */ +static const value_string ansi_map_TerminationTreatment_vals[] = { + { 0, "Not used"}, + { 1, "MS Termination"}, + { 2, "Voice Mail Storage"}, + { 3, "Voice Mail Retrieval"}, + { 4, "Dialogue Termination"}, + { 0, NULL } +}; - switch ((value & 0x0c) >> 2) - { - case 0: str = "No MWI. Notification is not authorized or notification is not required"; break; - case 1: str = "Reserved"; break; - case 2: str = "MWI On. Notification is required. Messages waiting"; break; - case 3: str = "MWI Off. Notification is required. No messages waiting"; break; - } +/* 6.5.2.159 TerminationTriggers */ +/* Busy (octet 1, bits A and B) */ +static const value_string ansi_map_terminationtriggers_busy_vals[] = { + { 0, "Busy Call"}, + { 1, "Busy Trigger"}, + { 2, "Busy Leg"}, + { 3, "Reserved. Treat as an unrecognized parameter value"}, + { 0, NULL } +}; +/* Routing Failure (RF) (octet 1, bits C and D) */ +static const value_string ansi_map_terminationtriggers_rf_vals[] = { + { 0, "Failed Call"}, + { 1, "Routing Failure Trigger"}, + { 2, "Failed Leg"}, + { 3, "Reserved. Treat as an unrecognized parameter value"}, + { 0, NULL } +}; +/* No Page Response (NPR) (octet 1, bits E and F) */ +static const value_string ansi_map_terminationtriggers_npr_vals[] = { + { 0, "No Page Response Call"}, + { 1, "No Page Response Trigger"}, + { 2, "No Page Response Leg"}, + { 3, "Reserved. Treat as an unrecognized parameter value"}, + { 0, NULL } +}; +/* No Answer (NA) (octet 1, bits G and H) */ +static const value_string ansi_map_terminationtriggers_na_vals[] = { + { 0, "No Answer Call"}, + { 1, "No Answer Trigger"}, + { 2, "No Answer Leg"}, + { 3, "Reserved"}, + { 0, NULL } +}; +/* None Reachable (NR) (octet 2, bit A) */ +static const value_string ansi_map_terminationtriggers_nr_vals[] = { + { 0, "Member Not Reachable"}, + { 1, "Group Not Reachable"}, + { 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x0c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Message Waiting Indication (MWI), %s", - bigbuf, - str); +/* 6.5.2.159 TerminationTriggers N.S0005-0 v 1.0*/ +static void +dissect_ansi_map_terminationtriggers(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Alert Pip Tone (APT), %s", - bigbuf, - (value & 0x02) ? "notification is required" : "notification is not authorized or notification is not required"); + int offset = 0; + proto_item *item; + proto_tree *subtree; - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Pip Tone (PT), %s", - bigbuf, - (value & 0x01) ? "notification is required" : "notification is not authorized or notification is not required"); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_transactioncapability); + + /* Busy (octet 1, bits A and B) */ + proto_tree_add_item(subtree, hf_ansi_map_terminationtriggers_busy, tvb, offset, 1, FALSE); + /* Routing Failure (RF) (octet 1, bits C and D) */ + proto_tree_add_item(subtree, hf_ansi_map_terminationtriggers_rf, tvb, offset, 1, FALSE); + /* No Answer (NA) (octet 1, bits G and H) */ + proto_tree_add_item(subtree, hf_ansi_map_terminationtriggers_na, tvb, offset, 1, FALSE); + /* No Page Response (NPR) (octet 1, bits E and F) */ + proto_tree_add_item(subtree, hf_ansi_map_terminationtriggers_npr, tvb, offset, 1, FALSE); + + offset++; + + /* None Reachable (NR) (octet 2, bit A) */ + proto_tree_add_item(subtree, hf_ansi_map_terminationtriggers_nr, tvb, offset, 1, FALSE); +} + +/* 6.5.2.160 TransactionCapability (TIA/EIA-41.5-D, page 5-315) */ +/* Updated with N.S0010-0 v 1.0, N.S0012-0 v 1.0 N.S0013-0 v 1.0 */ +static const true_false_string ansi_map_trans_cap_prof_bool_val = { + "The system is capable of supporting the IS-41-C profile parameters", + "The system is not capable of supporting the IS-41-C profile parameters" +}; - EXTRANEOUS_DATA_CHECK(len, 1); -} +static const true_false_string ansi_map_trans_cap_busy_bool_val = { + "The system is capable of detecting a busy condition at the current time", + "The system is not capable of detecting a busy condition at the current time" +}; -static void -param_paca_ind(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +static const true_false_string ansi_map_trans_cap_ann_bool_val = { + "The system is capable of honoring the AnnouncementList parameter at the current time", + "The system is not capable of honoring the AnnouncementList parameter at the current time" +}; - saved_offset = asn1->offset; +static const true_false_string ansi_map_trans_cap_rui_bool_val = { + "The system is capable of interacting with the user", + "The system is not capable of interacting with the user" +}; - asn1_int32_value_decode(asn1, 1, &value); +static const true_false_string ansi_map_trans_cap_spini_bool_val = { + "The system is capable of supporting local SPINI operation", + "The system is not capable of supporting local SPINI operation at the current time" +}; - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +static const true_false_string ansi_map_trans_cap_uzci_bool_val = { + "The system is User Zone capable at the current time", + "The system is not User Zone capable at the current time" +}; +static const true_false_string ansi_map_trans_cap_ndss_bool_val = { + "Serving system is NDSS capable", + "Serving system is not NDSS capable" +}; +static const true_false_string ansi_map_trans_cap_nami_bool_val = { + "The system is CNAP/CNAR capable", + "The system is not CNAP/CNAR capable" +}; - switch ((value & 0x1e) >> 1) - { - case 0: str = "Not used"; break; - case 1: str = "Priority Level 1"; break; - case 2: str = "Priority Level 2"; break; - case 3: str = "Priority Level 3"; break; - case 4: str = "Priority Level 4"; break; - case 5: str = "Priority Level 5"; break; - case 6: str = "Priority Level 6"; break; - case 7: str = "Priority Level 7"; break; - case 8: str = "Priority Level 8"; break; - case 9: str = "Priority Level 9"; break; - case 10: str = "Priority Level 10"; break; - case 11: str = "Priority Level 11"; break; - case 12: str = "Priority Level 12"; break; - case 13: str = "Priority Level 13"; break; - case 14: str = "Priority Level 14"; break; - case 15: str = "Priority Level 15"; break; - } +static const value_string ansi_map_trans_cap_multerm_vals[] = { + { 0, "The system cannot accept a termination at this time (i.e., cannot accept routing information)"}, + { 1, "The system supports the number of call legs indicated"}, + { 2, "The system supports the number of call legs indicated"}, + { 3, "The system supports the number of call legs indicated"}, + { 4, "The system supports the number of call legs indicated"}, + { 5, "The system supports the number of call legs indicated"}, + { 6, "The system supports the number of call legs indicated"}, + { 7, "The system supports the number of call legs indicated"}, + { 8, "The system supports the number of call legs indicated"}, + { 9, "The system supports the number of call legs indicated"}, + { 10, "The system supports the number of call legs indicated"}, + { 11, "The system supports the number of call legs indicated"}, + { 12, "The system supports the number of call legs indicated"}, + { 13, "The system supports the number of call legs indicated"}, + { 14, "The system supports the number of call legs indicated"}, + { 15, "The system supports the number of call legs indicated"}, + { 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x1e, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : PACA Level, %s", - bigbuf, - str); +static const true_false_string ansi_map_trans_cap_tl_bool_val = { + "The system is capable of supporting the TerminationList parameter at the current time", + "The system is not capable of supporting the TerminationList parameter at the current time" +}; - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : PACA is %spermanently activated", - bigbuf, - (value & 0x01) ? "" : "not "); +static const true_false_string ansi_map_trans_cap_waddr_bool_val = { + "The system is capable of supporting the TriggerAddressList parameter", + "The system is not capable of supporting the TriggerAddressList parameter" +}; - EXTRANEOUS_DATA_CHECK(len, 1); -} static void -param_digit_collect_ctrl(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; +dissect_ansi_map_transactioncapability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + + int offset = 0; proto_item *item; proto_tree *subtree; - saved_offset = asn1->offset; + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_transactioncapability); + + /*NAME Capability Indicator (NAMI) (octet 1, bit H) */ + proto_tree_add_item(subtree, hf_ansi_map_trans_cap_nami, tvb, offset, 1, FALSE); + /* NDSS Capability (NDSS) (octet 1, bit G) */ + proto_tree_add_item(subtree, hf_ansi_map_trans_cap_ndss, tvb, offset, 1, FALSE); + /* UZ Capability Indicator (UZCI) (octet 1, bit F) */ + proto_tree_add_item(subtree, hf_ansi_map_trans_cap_uzci, tvb, offset, 1, FALSE); + /* Subscriber PIN Intercept (SPINI) (octet 1, bit E) */ + proto_tree_add_item(subtree, hf_ansi_map_trans_cap_spini, tvb, offset, 1, FALSE); + /* Remote User Interaction (RUI) (octet 1, bit D) */ + proto_tree_add_item(subtree, hf_ansi_map_trans_cap_rui, tvb, offset, 1, FALSE); + /* Announcements (ANN) (octet 1, bit C) */ + proto_tree_add_item(subtree, hf_ansi_map_trans_cap_ann, tvb, offset, 1, FALSE); + /* Busy Detection (BUSY) (octet 1, bit B) */ + proto_tree_add_item(subtree, hf_ansi_map_trans_cap_busy, tvb, offset, 1, FALSE); + /* Profile (PROF) (octet 1, bit A) */ + proto_tree_add_item(subtree, hf_ansi_map_trans_cap_prof, tvb, offset, 1, FALSE); + offset++; + + /* WIN Addressing (WADDR) (octet 2, bit F) */ + proto_tree_add_item(subtree, hf_ansi_trans_cap_waddr, tvb, offset, 1, FALSE); + /* Multiple Terminations (octet 2, bits A-D) */ + proto_tree_add_item(subtree, hf_ansi_trans_cap_multerm, tvb, offset, 1, FALSE); + /* TerminationList (TL) (octet 2, bit E) */ + proto_tree_add_item(subtree, hf_ansi_trans_cap_tl, tvb, offset, 1, FALSE); +} + +/* 6.5.2.162 UniqueChallengeReport */ +/* Unique Challenge Report (octet 1) */ +static const value_string ansi_map_UniqueChallengeReport_vals[] = { + { 0, "Not used"}, + { 1, "Unique Challenge not attempted"}, + { 2, "Unique Challenge no response"}, + { 3, "Unique Challenge successful"}, + { 4, "Unique Challenge failed"}, + { 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +/* 6.5.2.166 VoicePrivacyMask */ + + +/* 6.5.2.e (TSB76) CDMAServiceConfigurationRecord N.S0008-0 v 1.0 */ +/* a. This field carries the CDMA Service Configuration Record. The bit-layout is the +same as that of Service Configuration Record in TSB74, and J-STD-008. +*/ + +/* 6.5.2.f (TSB76) CDMAServiceOption N.S0008-0 v 1.0*/ +/* This field carries the CDMA Service Option. The bit-layout is the same as that of +Service Option in TSB74 and J-STD-008.*/ + +/* 6.5.2.i (IS-730) TDMAServiceCode N.S0008-0 v 1.0 */ +static const value_string ansi_map_TDMAServiceCode_vals[] = { + { 0, "Analog Speech Only"}, + { 1, "Digital Speech Only"}, + { 2, "Analog or Digital Speech, Analog Preferred"}, + { 3, "Analog or Digital Speech, Digital Preferred"}, + { 4, "Asynchronous Data"}, + { 5, "G3 Fax"}, + { 6, "Not Used (Service Rejected)"}, + { 7, "STU-III"}, + { 0, NULL } +}; +/* 6.5.2.j (IS-730) TDMATerminalCapability N.S0008-0 v 1.0 Updted with N.S0015-0 */ +/* Supported Frequency Band (octet 1) */ +/* Voice Coder (octet 2) */ +/* Protocol Version (octet 3) N.S0015-0 */ +static const value_string ansi_map_TDMATerminalCapability_prot_ver_vals[] = { + { 0, "EIA-553 or IS-54-A"}, + { 1, "TIA/EIA-627.(IS-54-B)"}, + { 2, "IS-136"}, + { 3, "Permanently Reserved (ANSI J-STD-011).Treat the same as value 4, IS-136-A."}, + { 4, "PV 0 as published in TIA/EIA-136-0 and IS-136-A."}, + { 5, "PV 1 as published in TIA/EIA-136-A."}, + { 6, "PV 2 as published in TIA/EIA-136-A."}, + { 7, "PV 3 as published in TIA/EIA-136-A."}, + { 0, NULL } +}; +/* Asynchronous Data (ADS) (octet 4, bit A) N.S0007-0*/ +/* Group 3 Fax (G3FAX) (octet 4, bit B) */ +/* Secure Telephone Unit III (STU3) (octet 4, bit C) */ +/* Analog Voice (AVOX) (octet 4, bit D) */ +/* Half Rate (HRATE) (octet 4, bit E) */ +/* Full Rate (FRATE) (octet 4, bit F) */ +/* Double Rate (2RATE) (octet 4, bit G) */ +/* Triple Rate (3RATE) (octet 4, bit H) */ - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Break (BRK), %s", - bigbuf, - (value & 0x80) ? "Break In (default)" : "No Break"); - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Type Ahead (TA), %s", - bigbuf, - (value & 0x40) ? "Buffer (default)" : "No Type Ahead"); +/* 6.5.2.k (IS-730)) TDMAVoiceCoder N.S0008-0 v 1.0, N.S0007-0 */ +/* VoiceCoder (octet 1) */ - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +/* 6.5.2.p UserZoneData N.S0015-0 */ - other_decode_bitfield_value(bigbuf, value, 0x1f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Maximum Collect (%u)", - bigbuf, - (value & 0x1f)); +/* 6.5.2.aa BaseStationManufacturerCode N.S0007-0 v 1.0 */ +/* The BaseStationManufacturerCode (BSMC) parameter specifies the manufacturer of the +base station that is currently serving the MS (see IS-136 for enumeration of values).*/ - if (len == 1) return; +/* 6.5.2.ab BSMCStatus */ - saved_offset = asn1->offset; +/* BSMC Status (octet 1) */ +static const value_string ansi_map_BSMCStatus_vals[] = { + { 0, "Same BSMC Value shall not be supported"}, + { 1, "Same BSMC Value shall be supported"}, + { 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +/*- 6.5.2.ac ControlChannelMode (N.S0007-0 v 1.0)*/ +static const value_string ansi_map_ControlChannelMode_vals[] = { + { 0, "Unknown"}, + { 1, "MS is in Analog CC Mode"}, + { 2, "MS is in Digital CC Mode"}, + { 3, "MS is in NAMPS CC Mode"}, + { 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +/* 6.5.2.ad NonPublicData N.S0007-0 v 1.0*/ +/* NP Only Service (NPOS) (octet 1, bits A and B) */ +/* Charging Area Tone Service (CATS) (octet 1, bits C - F) */ +/* PSID/RSID Download Order (PRDO) (octet 1, bits G and H) */ + +/* 6.5.2.ae PagingFrameClass N.S0007-0 v 1.0*/ +/* Paging Frame Class (octet 1) */ + +static const value_string ansi_map_PagingFrameClass_vals[] = { + { 0, "PagingFrameClass 1 (1.28 seconds)"}, + { 1, "PagingFrameClass 2 (2.56 seconds)"}, + { 2, "PagingFrameClass 3 (3.84 seconds)"}, + { 3, "PagingFrameClass 4 (7.68 seconds)"}, + { 4, "PagingFrameClass 5 (15.36 seconds)"}, + { 5, "PagingFrameClass 6 (30.72 seconds)"}, + { 6, "PagingFrameClass 7 (61.44 seconds)"}, + { 7, "PagingFrameClass 8 (122.88 seconds)"}, + { 8, "Reserved. Treat the same as value 0, PagingFrameClass 1"}, + { 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x1f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Minimum Collect (%u)", - bigbuf, - (value & 0x1f)); +/* 6.5.2.af PSID_RSIDInformation N.S0007-0 v 1.0*/ +/* PSID/RSID Indicator (octet 1, bit A) */ +/* PSID/RSID Type (octet 1, bits B-D) */ + +/* 6.5.2.ah ServicesResult N.S0007-0 v 1.0*/ +/* PSID/RSID Download Result (PRDR) (octet 1, bits A and B) */ +static const value_string ansi_map_ServicesResult_ppr_vals[] = { + { 0, "No Indication"}, + { 1, "Unsuccessful PSID/RSID download"}, + { 2, "Successful PSID/RSID download"}, + { 3, "Reserved. Treat the same as value 0, No Indication"}, + { 0, NULL } +}; - if (len == 2) return; - - saved_offset = asn1->offset; +/* 6.5.2.ai SOCStatus N.S0007-0 v 1.0*/ - asn1_int32_value_decode(asn1, 1, &value); - - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Maximum Interaction Time (%u) seconds", - value); - - if (len == 3) return; - - saved_offset = asn1->offset; +/* SOC Status (octet 1) */ +static const value_string ansi_map_SOCStatus_vals[] = { + { 0, "Same SOC Value shall not be supported"}, + { 1, "Same SOC Value shall be supported"}, + { 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +/* 6.5.2.aj SystemOperatorCode N.S0007-0 v 1.0*/ +/* The SystemOperatorCode (SOC) parameter specifies the system operator that is currently +providing service to a MS (see IS-136 for enumeration of values) */ + +/* 6.5.2.al UserGroup N.S0007-0 v 1.0*/ + +/* 6.5.2.am UserZoneData N.S0007-0 v 1.0*/ + + +/*Table 6.5.2.ay TDMABandwidth value N.S0008-0 v 1.0 */ +static const value_string ansi_map_TDMABandwidth_vals[] = { + { 0, "Half-Rate Digital Traffic Channel Only"}, + { 1, "Full-Rate Digital Traffic Channel Only"}, + { 2, "Half-Rate or Full-rate Digital Traffic Channel - Full-Rate Preferred"}, + { 3, "Half-rate or Full-rate Digital Traffic Channel - Half-rate Preferred"}, + { 4, "Double Full-Rate Digital Traffic Channel Only"}, + { 5, "Triple Full-Rate Digital Traffic Channel Only"}, + { 6, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"}, + { 7, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"}, + { 8, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"}, + { 9, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"}, + { 10, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"}, + { 11, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"}, + { 12, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"}, + { 13, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"}, + { 14, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"}, + { 15, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"}, + { 0, NULL } - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +}; - other_decode_bitfield_value(bigbuf, value, 0x1f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Initial Interdigit Time (%u) seconds", - bigbuf, - (value & 0x1f)); - - if (len == 4) return; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x1f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Normal Interdigit Time (%u) seconds", - bigbuf, - (value & 0x1f)); - - if (len == 5) return; - - saved_offset = asn1->offset; - - item = - proto_tree_add_text(tree, asn1->tvb, - saved_offset, (len > 6) ? 2 : 1, - "Clear Digits Digit Mask"); - - subtree = proto_item_add_subtree(item, ett_clr_dig_mask); - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 7 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 6 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 5 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 4 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 3 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 2 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 1 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 0 Digit", - bigbuf); - - if (len == 6) return; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : # Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : * Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 9 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 8 Digit", - bigbuf); - - if (len == 7) return; - - saved_offset = asn1->offset; - - item = - proto_tree_add_text(tree, asn1->tvb, - saved_offset, (len > 8) ? 2 : 1, - "Enter Digits Digit Mask"); - - subtree = proto_item_add_subtree(item, ett_ent_dig_mask); - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 7 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 6 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 5 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 4 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 3 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 2 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 1 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 0 Digit", - bigbuf); - - if (len == 8) return; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : # Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : * Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 9 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 8 Digit", - bigbuf); - - if (len == 9) return; - - saved_offset = asn1->offset; - - item = - proto_tree_add_text(tree, asn1->tvb, - saved_offset, (len > 10) ? 2 : 1, - "Allowed Digits Digit Mask"); - - subtree = proto_item_add_subtree(item, ett_all_dig_mask); - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 7 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 6 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 5 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 4 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 3 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 2 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 1 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 0 Digit", - bigbuf); - - if (len == 10) return; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : # Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : * Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 9 Digit", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 8 Digit", - bigbuf); - - if (len == 11) return; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x1f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Special Interdigit Time (%u)", - bigbuf, - value & 0x1f); - - if (len == 12) return; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 8", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 7", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 6", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 5", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 4", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 3", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 2", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 1", - bigbuf); - - if (len == 13) return; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 16", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 15", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 14", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 13", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 12", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 11", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 10", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 9", - bigbuf); - - if (len == 14) return; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 24", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 23", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 22", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 21", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 20", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 19", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 18", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 17", - bigbuf); - - if (len == 15) return; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 31", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 30", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 29", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 28", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 27", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 26", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SIT 25", - bigbuf); - - EXTRANEOUS_DATA_CHECK(len, 16); -} +/* 6.5.2.az TDMADataFeaturesIndicator N.S0008-0 v 1.0 */ +/* TDMADataFeaturesIndicator +ansi_map_FeatureActivity_vals + + ADS FeatureActivity ADS-FA ( octet 1 bit A and B ) + G3 Fax FeatureActivity G3FAX-FA ( octet 1 bit C and D ) + STU-III FeatureActivity STUIII-FA ( octet 1 bit E and F ) + Half Rate data FeatureActivity HRATE-FA ( octet 2 bit A and B ) + Full Rate data FeatureActivity FRATE-FA ( octet 2 bit C and D ) + Double Rate data FeatureActivity 2RATE-FA ( octet 2 bit E and F ) + Triple Rate data FeatureActivity 3RATE-FA ( octet g bit G and H ) + + Table 6.5.2.azt TDMADataFeaturesIndicator value + static const value_string ansi_map_TDMADataFeaturesIndicator_vals[] = { + { 0, "Not Used"}, + { 1, "Not Authorized"}, + { 2, "Authorized, but de-activated"}, + { 3, "Authorized and activated"}, + { 0, NULL } -static void -param_no_ans_time(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; +}; +*/ + +/* 6.5.2.ba TDMADataMode N.S0008-0 v 1.0*/ + +/* 6.5.2.bb TDMAVoiceMode */ + +/* 6.5.2.bb CDMAConnectionReference N.S0008-0 v 1.0 */ +/* Service Option Connection Reference Octet 1 */ +/* a. This field carries the CDMA Service Option Connection Reference. The bitlayout + is the same as that of Service Option Connection Reference in TSB74 and + J-STD-008. +*/ + +/* 6.5.2.ad CDMAState N.S0008-0 v 1.0 */ +/* Service Option State Octet 1 */ +/* a. This field carries the CDMA Service Option State information. The CDMA +Service Option State is defined in the current CDMA Service Options standard. +If CDMA Service Option State is not explicitly defined within a section of the +relevant CDMA Service Option standard, the CDMA Service Option State shall +carry the value of the ORD_Q octet of all current Service Option Control Orders +(see IS-95), or the contents of all current CDMA Service Option Control +Messages (see TSB74) type specific field for this connection reference. */ + +/* 6.5.2.aj SecondInterMSCCircuitID */ +/* -- XXX Same code as ISLPinformation??? +dissect_ansi_map_secondintermsccircuitid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ + + int offset = 0; + proto_item *item; + proto_tree *subtree; - saved_offset = asn1->offset; + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_billingid); + / Trunk Group Number (G) Octet 1 / + proto_tree_add_item(subtree, hf_ansi_map_tgn, tvb, offset, 1, FALSE); + offset++; + / Trunk Member Number (M) Octet2 / + proto_tree_add_item(subtree, hf_ansi_map_tmn, tvb, offset, 1, FALSE); +} +*/ +/* 6.5.2.as ChangeServiceAttributes N.S0008-0 v 1.0 */ +/* Change Facilities Flag (CHGFAC)(octet 1, bits A - B) */ +static const value_string ansi_map_ChangeServiceAttributes_chgfac_vals[] = { + { 0, "Change Facilities Operation Requested"}, + { 1, "Change Facilities Operation Not Requested"}, + { 2, "Change Facilities Operation Used"}, + { 3, "Change Facilities Operation Not Used"}, + { 0, NULL } +}; +/* Service Negotiate Flag (SRVNEG)(octet 1, bits C - D) */ +static const value_string ansi_map_ChangeServiceAttributes_srvneg_vals[] = { + { 0, "Service Negotiation Used"}, + { 1, "Service Negotiation Not Used"}, + { 2, "Service Negotiation Required"}, + { 3, "Service Negotiation Not Required"}, + { 0, NULL } +}; +/* 6.5.2.au DataPrivacyParameters N.S0008-0 v 1.0*/ +/* Privacy Mode (PM) (octet 1, Bits A and B) */ +static const value_string ansi_map_DataPrivacyParameters_pm_vals[] = { + { 0, "Privacy inactive or not supported"}, + { 1, "Privacy Requested or Acknowledged"}, + { 2, "Reserved. Treat reserved values the same as value 0, Privacy inactive or not supported."}, + { 3, "Reserved. Treat reserved values the same as value 0, Privacy inactive or not supported."}, + { 0, NULL } +}; +/* Data Privacy Version (PM) (octet 2) */ +static const value_string ansi_map_DataPrivacyParameters_data_priv_ver_vals[] = { + { 0, "Not used"}, + { 1, "Data Privacy Version 1"}, + { 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +/* 6.5.2.av ISLPInformation N.S0008-0 v 1.0*/ +/* ISLP Type (octet 1) */ +static const value_string ansi_map_islp_type_vals[] = { + { 0, "No ISLP supported"}, + { 1, "ISLP supported"}, + { 0, NULL } +}; +/* 6.5.2.bc AnalogRedirectInfo */ +/* Sys Ordering (octet 1, bits A-E) */ +/* Ignore CDMA (IC) (octet 1, bit F) */ - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "(%u) The number of seconds to wait after alerting an MS or after seizing an outgoing trunk before applying no answer trigger treatment.", - value); +/* 6.5.2.be CDMAChannelNumber N.S0010-0 v 1.0*/ - EXTRANEOUS_DATA_CHECK(len, 1); -} +/* 6.5.2.bg CDMAPowerCombinedIndicator N.S0010-0 v 1.0*/ -static void -param_mw_noti_count(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset, orig_offset; - const gchar *str = NULL; - char *buf; +/* 6.5.2.bi CDMASearchParameters N.S0010-0 v 1.0*/ - SHORT_DATA_CHECK(len, 2); +/* 6.5.2.bk CDMANetworkIdentification N.S0010-0 v 1.0*/ +/* See CDMA [J-STD-008] for encoding of this field. */ - orig_offset = asn1->offset; - saved_offset = asn1->offset; +/* 6.5.2.bo RequiredParametersMask N.S0010-0 v 1.0 */ - do - { - asn1_int32_value_decode(asn1, 1, &value); +/* 6.5.2.bp ServiceRedirectionCause */ +static const value_string ansi_map_ServiceRedirectionCause_type_vals[] = { + { 0, "Not used"}, + { 1, "NormalRegistration"}, + { 2, "SystemNotFound."}, + { 3, "ProtocolMismatch."}, + { 4, "RegistrationRejection."}, + { 5, "WrongSID."}, + { 6, "WrongNID.."}, + { 0, NULL } +}; - switch (value) - { - case 0: str = "Voice Messages"; break; - case 1: str = "Short Message Services (SMS) messages"; break; - case 2: str = "Group 3 (G3) Fax messages"; break; - case 255: str = "Not specified"; break; - default: - str = "Reserved, treat as Not specified"; - break; - } +/* 6.5.2.bq ServiceRedirectionInfo N.S0010-0 v 1.0 */ - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Type of messages, %s", - str); +/* 6.5.2.br RoamingIndication N.S0010-0 v 1.0*/ +/* See CDMA [TSB58] for the definition of this field. */ - saved_offset = asn1->offset; +/* 6.5.2.bw CallingPartyName N.S0012-0 v 1.0*/ - asn1_int32_value_decode(asn1, 1, &value); +/* Presentation Status (octet 1, bits A and B) */ +static const value_string ansi_map_Presentation_Status_vals[] = { + { 0, "Presentation allowed"}, + { 1, "Presentation restricted"}, + { 2, "Blocking toggle"}, + { 3, "No indication"}, + { 0, NULL } +}; +/* Availability (octet 1, bit E) N.S0012-0 v 1.0*/ +static const true_false_string ansi_map_Availability_bool_val = { + "Name not available", + "Name available/unknown" +}; +static void +dissect_ansi_map_callingpartyname(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - switch (value) - { - case 0: str = "No messages are waiting"; break; - case 254: str = "254 or more messages are waiting"; break; - case 255: str = "An unknown number of messages are waiting (greater than zero)"; break; - default: - buf=ep_alloc(512); - g_snprintf(buf, 512, "%u messages are waiting", value); - str = buf; - break; - } + int offset = 0; + proto_item *item; + proto_tree *subtree; + + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_originationtriggers); + /* Availability (octet 1, bit E) N.S0012-0 v 1.0*/ + + /* Presentation Status (octet 1, bits A and B) */ - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); - saved_offset = asn1->offset; - } - while ((len - (saved_offset - orig_offset)) >= 2); - EXTRANEOUS_DATA_CHECK((len - (saved_offset - orig_offset)), 0); } + +/* 6.5.2.bx DisplayText N.S0012-0 v 1.0*/ +/* a. Refer to ANSI T1.610 for field encoding. */ + +/* 6.5.2.bz ServiceID +Service Identifier (octets 1 to n) +0 Not used. +1 Calling Name Presentation - No RND. +2 Calling Name Presentation with RND. + */ + +/* 6.5.2.co GlobalTitle N.S0013-0 v 1.0 + * Refer to Section 3 of ANSI T1.112 for the encoding of this field. + */ +/* Address Indicator octet 1 */ +/* Global Title Octet 2 - n */ + + +/* 6.5.2.dc SpecializedResource N.S0013-0 v 1.0*/ +/* Resource Type (octet 1) */ +static const value_string ansi_map_resource_type_vals[] = { + { 0, "Not used"}, + { 1, "DTMF tone detector"}, + { 2, "Automatic Speech Recognition - Speaker Independent - Digits"}, + { 3, "Automatic Speech Recognition - Speaker Independent - Speech User Interface Version 1"}, + { 0, NULL } +}; +/* 6.5.2.df TriggerCapability */ +/* Updated with N.S0004 N.S0013-0 v 1.0*/ + +static const true_false_string ansi_map_triggercapability_bool_val = { + "triggers can be armed by the TriggerAddressList parameter", + "triggers cannot be armed by the TriggerAddressList parameter" +}; + static void -param_otfi(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +dissect_ansi_map_triggercapability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - saved_offset = asn1->offset; + int offset = 0; + proto_item *item; + proto_tree *subtree; - asn1_int32_value_decode(asn1, 1, &value); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_originationtriggers); + + + /* O_No_Answer (ONA) (octet 1, bit H)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_ona, tvb, offset, 1, FALSE); + /* O_Disconnect (ODISC) (octet 1, bit G)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_odisc, tvb, offset, 1, FALSE); + /* O_Answer (OANS) (octet 1, bit F)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_oans, tvb, offset, 1, FALSE); + /* Origination_Attempt_Authorized (OAA) (octet 1, bit E)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_oaa, tvb, offset, 1, FALSE); + /* Revertive_Call (RvtC) (octet 1, bit D)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_rvtc, tvb, offset, 1, FALSE); + /* All_Calls (All) (octet 1, bit C)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_all, tvb, offset, 1, FALSE); + /* K-digit (K-digit) (octet 1, bit B)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_kdigit, tvb, offset, 1, FALSE); + /* Introducing Star/Pound (INIT) (octet 1, bit A) */ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_init, tvb, offset, 1, FALSE); + offset++; + + + /* O_Called_Party_Busy (OBSY) (octet 2, bit H)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_obsy, tvb, offset, 1, FALSE); + /* Called_Routing_Address_Available (CdRAA) (octet 2, bit G)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_cdraa, tvb, offset, 1, FALSE); + /* Initial_Termination (IT) (octet 2, bit F)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_it, tvb, offset, 1, FALSE); + /* Calling_Routing_Address_Available (CgRAA)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_cgraa, tvb, offset, 1, FALSE); + /* Advanced_Termination (AT) (octet 2, bit D)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_at, tvb, offset, 1, FALSE); + /* Prior_Agreement (PA) (octet 2, bit C)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_pa, tvb, offset, 1, FALSE); + /* Unrecognized_Number (Unrec) (octet 2, bit B)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_unrec, tvb, offset, 1, FALSE); + /* Call Types (CT) (octet 2, bit A)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_ct, tvb, offset, 1, FALSE); + offset++; + /* */ + /* */ + /* */ + /* T_Disconnect (TDISC) (octet 3, bit E)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_tdisc, tvb, offset, 1, FALSE); + /* T_Answer (TANS) (octet 3, bit D)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_tans, tvb, offset, 1, FALSE); + /* T_No_Answer (TNA) (octet 3, bit C)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_tna, tvb, offset, 1, FALSE); + /* T_Busy (TBusy) (octet 3, bit B)*/ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_tbusy, tvb, offset, 1, FALSE); + /* Terminating_Resource_Available (TRA) (octet 3, bit A) */ + proto_tree_add_item(subtree, hf_ansi_map_triggercapability_tra, tvb, offset, 1, FALSE); + +} +/* 6.5.2.ei DMH_ServiceID N.S0018 */ + +/* 6.5.2.dj WINOperationsCapability */ +/* Updated with N.S0004 */ +/* ConnectResource (CONN) (octet 1, bit A) */ +static const true_false_string ansi_map_winoperationscapability_conn_bool_val = { + "Sender is capable of supporting the ConnectResource, DisconnectResource, ConnectionFailureReport and ResetTimer (SSFT timer) operations", + "Sender is not capable of supporting the ConnectResource, DisconnectResource,ConnectionFailureReport and ResetTimer (SSFT timer) operations" +}; - switch ((value & 0xc0) >> 6) - { - case 0: str = "Ignore"; break; - case 1: str = "Presentation Allowed"; break; - case 2: str = "Presentation Restricted"; break; - case 3: str = "Reserved"; break; - } +/* CallControlDirective (CCDIR) (octet 1, bit B) */ +static const true_false_string ansi_map_winoperationscapability_ccdir_bool_val = { + "Sender is capable of supporting the CallControlDirective operation", + "Sender is not capable of supporting the CallControlDirective operation" +}; - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Calling Number ID Restriction, %s", - bigbuf, - str); +/* PositionRequest (POS) (octet 1, bit C) */ +static const true_false_string ansi_map_winoperationscapability_pos_bool_val = { + "Sender is capable of supporting the PositionRequest operation", + "Sender is not capable of supporting the PositionRequest operation" +}; +static void +dissect_ansi_map_winoperationscapability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - switch ((value & 0x30) >> 4) - { - case 0: str = "Ignore"; break; - case 1: str = "Pip Tone Inactive"; break; - case 2: str = "Pip Tone Active"; break; - case 3: str = "Reserved"; break; - } + int offset = 0; + proto_item *item; + proto_tree *subtree; - other_decode_bitfield_value(bigbuf, value, 0x30, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Message Waiting Notification, %s", - bigbuf, - str); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_originationtriggers); + + /* PositionRequest (POS) (octet 1, bit C) */ + proto_tree_add_item(subtree, hf_ansi_map_winoperationscapability_pos, tvb, offset, 1, FALSE); + /* CallControlDirective (CCDIR) (octet 1, bit B) */ + proto_tree_add_item(subtree, hf_ansi_map_winoperationscapability_ccdir, tvb, offset, 1, FALSE); + /* ConnectResource (CONN) (octet 1, bit A) */ + proto_tree_add_item(subtree, hf_ansi_map_winoperationscapability_conn, tvb, offset, 1, FALSE); - switch ((value & 0x0c) >> 2) - { - case 0: str = "Ignore"; break; - case 1: str = "No CW"; break; - case 2: str = "Normal CW"; break; - case 3: str = "Priority CW"; break; - } +} - other_decode_bitfield_value(bigbuf, value, 0x0c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Call Waiting for Incoming Call (CWIC), %s", - bigbuf, - str); +/* 6.5.2.ek ControlNetworkID N.S0018*/ +static void +dissect_ansi_map_controlnetworkid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){ - switch (value & 0x03) - { - case 0: str = "Ignore"; break; - case 1: str = "No CW"; break; - case 2: str = "Normal CW"; break; - case 3: str = "Priority CW"; break; - } + int offset = 0; + proto_item *item; + proto_tree *subtree; - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Call Waiting for Future Incoming Call (CWFI), %s", - bigbuf, - str); + item = get_ber_last_created_item(); + subtree = proto_item_add_subtree(item, ett_originationtriggers); + /* MarketID octet 1 and 2 */ + proto_tree_add_item(subtree, hf_ansi_map_MarketID, tvb, offset, 2, FALSE); + offset = offset + 2; + /* Switch Number octet 3*/ + proto_tree_add_item(subtree, hf_ansi_map_swno, tvb, offset, 1, FALSE); + offset++; +} - if (len == 1) return; - saved_offset = asn1->offset; +/* 6.5.2.dk WIN_TriggerList N.S0013-0 v 1.0 */ - asn1_int32_value_decode(asn1, 1, &value); +/* 6.5.2.ec DisplayText2 Updated in N.S0015-0*/ - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +/* 6.5.2.eq MSStatus N.S0004 */ - switch ((value & 0x30) >> 4) - { - case 0: str = "Ignore"; break; - case 1: str = "Presentation Allowed"; break; - case 2: str = "Presentation Restricted"; break; - case 3: str = "Blocking Toggle"; break; - } +/* 6.5.2.er PositionInformationCode N.S0004 */ - other_decode_bitfield_value(bigbuf, value, 0x30, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Calling Name Restriction (CNAR), %s", - bigbuf, - str); +/* 6.5.2.fd InterMessageTime N.S0015-0*/ +/* Timer value (in 10s of seconds) octet 1 */ - switch ((value & 0x0c) >> 2) - { - case 0: str = "Ignore"; break; - case 1: str = "Flash Inactive"; break; - case 2: str = "Flash Active"; break; - case 3: str = "Reserved"; break; - } +/* 6.5.2.fe MSIDUsage N.S0015-0 */ +/* M and I Report (octet 1, bits A and B) */ +static const value_string ansi_MSIDUsage_m_or_i_vals[] = { + { 0, "Not used"}, + { 1, "MIN last used"}, + { 2, "IMSI last used"}, + { 3, "Reserved"}, + { 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x0c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Flash Privileges (Flash), %s", - bigbuf, - str); +/* 6.5.2.ff NewMINExtension N.S0015-0 */ + +/* 6.5.2.fv ACGEncountered N.S0023-0 v 1.0 */ +/* ACG Encountered (octet 1, bits A-F) */ +static const value_string ansi_ACGEncountered_vals[] = { + { 0, "PC_SSN"}, + { 1, "1-digit control"}, + { 2, "2-digit control"}, + { 3, "3-digit control"}, + { 4, "4-digit control"}, + { 5, "5-digit control"}, + { 6, "6-digit control"}, + { 7, "7-digit control"}, + { 8, "8-digit control"}, + { 9, "9-digit control"}, + { 10, "10-digit control"}, + { 11, "11-digit control"}, + { 12, "12-digit control"}, + { 13, "13-digit control"}, + { 14, "14-digit control"}, + { 15, "15-digit control"}, + { 0, NULL } +}; +/* Control Type (octet 1, bits G-H) */ +static const value_string ansi_ACGEncountered_cntrl_type_vals[] = { + { 0, "Not used."}, + { 1, "Service Management System Initiated control encountered"}, + { 2, "SCF Overload control encountered"}, + { 3, "Reserved. Treat the same as value 0, Not used."}, + { 0, NULL } +}; - switch (value & 0x03) - { - case 0: str = "Ignore"; break; - case 1: str = "PACA Demand Inactive"; break; - case 2: str = "PACA Demand Actived"; break; - case 3: str = "Reserved"; break; - } +/* 6.5.2.fw ControlType N.S0023-0 v 1.0 * + + + +/* 6.5.2.ge QoSPriority N.S0029-0 v1.0*/ +/* 6.5.2.xx QOSPriority */ +/* Non-Assured Priority (octet 1, bits A-D) */ +static const value_string ansi_map_Priority_vals[] = { + { 0, "Priority Level 0. This is the lowest level"}, + { 1, "Priority Level 1"}, + { 2, "Priority Level 2"}, + { 3, "Priority Level 3"}, + { 4, "Priority Level 4"}, + { 5, "Priority Level 5"}, + { 6, "Priority Level 6"}, + { 7, "Priority Level 7"}, + { 8, "Priority Level 8"}, + { 8, "Priority Level 9"}, + { 10, "Priority Level 10"}, + { 11, "Priority Level 11"}, + { 12, "Priority Level 12"}, + { 13, "Priority Level 13"}, + { 14, "Reserved"}, + { 15, "Reserved"}, + { 0, NULL } +}; +/* Assured Priority (octet 1, bits E-H)*/ - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Priority Access and Channel Assignment (PACA), %s", - bigbuf, - str); - EXTRANEOUS_DATA_CHECK(len, 2); -} +/* 6.5.2.gf PDSNAddress N.S0029-0 v1.0*/ +/* a. See IOS Handoff Request message for the definition of this field. */ -/* - * For: - * Authentication Response - * Authentication Response Base Station - * Authentication Response Unique Challenge - */ -static void -param_auth_resp_all(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; +/* 6.5.2.gg PDSNProtocolType N.S0029-0 v1.0*/ +/* See IOS Handoff Request message for the definition of this field. */ - EXACT_DATA_CHECK(len, 3); +/* 6.5.2.gh CDMAMSMeasuredChannelIdentity N.S0029-0 v1.0*/ - saved_offset = asn1->offset; +/* 6.5.2.gl CallingPartyCategory N.S0027*/ +/* a. Refer to ITU-T Q.763 (Signalling System No. 7 ISDN user part formats and +codes) for encoding of this parameter. +b. Refer to national ISDN user part specifications for definitions and encoding of the +reserved for national use values. +*/ +/* 6.5.2.gm CDMA2000HandoffInvokeIOSData N.S0029-0 v1.0*/ +/* IOS A1 Element Handoff Invoke Information */ - asn1_int32_value_decode(asn1, 1, &value); - other_decode_bitfield_value(bigbuf, value, 0xfc, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +/* 6.5.2.gn CDMA2000HandoffResponseIOSData */ +/* IOS A1 Element Handoff Response Information N.S0029-0 v1.0*/ - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Response (MSB)", - bigbuf); +/* 6.5.2.gr CDMAServiceOptionConnectionIdentifier N.S0029-0 v1.0*/ - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - other_decode_bitfield_value(bigbuf, value, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Response", - bigbuf); +/* 6.5.2.bp-1 ServiceRedirectionCause value */ +static const value_string ansi_map_ServiceRedirectionCause_vals[] = { + { 0, "Not used"}, + { 1, "NormalRegistration"}, + { 2, "SystemNotFound"}, + { 3, "ProtocolMismatch"}, + { 4, "RegistrationRejection"}, + { 5, "WrongSID"}, + { 6, "WrongNID"}, + { 0, NULL } +}; +/* 6.5.2.mT AuthenticationResponseReauthentication N.S0011-0 v 1.0*/ + +/* 6.5.2.vT ReauthenticationReport N.S0011-0 v 1.0*/ +static const value_string ansi_map_ReauthenticationReport_vals[] = { + { 0, "Not used"}, + { 1, "Reauthentication not attempted"}, + { 2, "Reauthentication no response"}, + { 3, "Reauthentication successful"}, + { 4, "RReauthentication failed"}, + { 0, NULL } +}; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - other_decode_bitfield_value(bigbuf, value, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Response (LSB)", - bigbuf); -} +/* 6.5.2.lB AKeyProtocolVersion + N.S0011-0 v 1.0 + */ +static const value_string ansi_map_AKeyProtocolVersion_vals[] = { + { 0, "Not used"}, + { 1, "A-key Generation not supported"}, + { 2, "Diffie Hellman with 768-bit modulus, 160-bit primitive, and 160-bit exponents"}, + { 3, "Diffie Hellman with 512-bit modulus, 160-bit primitive, and 160-bit exponents"}, + { 4, "Diffie Hellman with 768-bit modulus, 32-bit primitive, and 160-bit exponents"}, + { 0, NULL } +}; +/* 6.5.2.sB OTASP_ResultCode + N.S0011-0 v 1.0 + */ +static const value_string ansi_map_OTASP_ResultCode_vals[] = { + { 0, "Accepted - Successful"}, + { 1, "Rejected - Unknown cause."}, + { 2, "Computation Failure - E.g., unable to compute A-key"}, + { 3, "CSC Rejected - CSC challenge failure"}, + { 4, "Unrecognized OTASPCallEntry"}, + { 5, "Unsupported AKeyProtocolVersion(s)"}, + { 6, "Unable to Commit"}, + { 0, NULL } +}; -static void -param_sys_acc_data(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len _U_) -{ - gint32 value; - guint saved_offset; +/*6.5.2.wB ServiceIndicator + N.S0011-0 v 1.0 + */ +static const value_string ansi_map_ServiceIndicator_vals[] = { + { 0, "Undefined Service"}, + { 1, "CDMA OTASP Service"}, + { 2, "TDMA OTASP Service"}, + { 3, "CDMA OTAPA Service"}, + { 0, NULL } +}; - EXACT_DATA_CHECK(len, 5); +/* 6.5.2.xB SignalingMessageEncryptionReport + N.S0011-0 v 1.0 + */ +static const value_string ansi_map_SMEReport_vals[] = { + { 0, "Not used"}, + { 1, "Signaling Message Encryption enabling not attempted"}, + { 2, "Signaling Message Encryption enabling no response"}, + { 3, "Signaling Message Encryption is enabled"}, + { 4, "Signaling Message Encryption enabling failed"}, + { 0, NULL } +}; - param_mscid(asn1, tree, 3, add_string, string_len); +/* 6.5.2.zB VoicePrivacyReport + N.S0011-0 v 1.0 + */ +static const value_string ansi_map_VoicePrivacyReport_vals[] = { + { 0, "Not used"}, + { 1, "Voice Privacy not attempted"}, + { 2, "Voice Privacy no response"}, + { 3, "Voiec Privacy is active"}, + { 4, "Voice Privacy failed"}, + { 0, NULL } +}; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 2, &value); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Serving Cell ID %u", - value); + +/*--- Included file: packet-ansi_map-fn.c ---*/ +#line 1 "packet-ansi_map-fn.c" +/*--- Fields for imported types ---*/ + +static int dissect_imsi_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_gsm_map_IMSI(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_imsi); } -static void -param_bill_id(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) -{ - gint32 id, segcount; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 7); - param_mscid(asn1, tree, 3, add_string, string_len); +static int +dissect_ansi_map_OCTET_STRING_SIZE_0_2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 3, &id); + return offset; +} +static int dissect_componentIDs_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_OCTET_STRING_SIZE_0_2(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_componentIDs); +} - proto_tree_add_int_format(tree, hf_ansi_map_billing_id, asn1->tvb, - saved_offset, asn1->offset - saved_offset,id, - "ID Number %d", - id); - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &segcount); - if (segcount == 255) { str = "Unspecified"; } - else if ((segcount >= 0) && (segcount <= 127)) { str = "Number of call segments"; } - else if ((segcount >= 128) && (segcount < 255)) { str = "Not used in TIA/EIA-41"; } +static int +dissect_ansi_map_INTEGER_M32768_32767(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Segment Counter %u: %s", - segcount, str); + return offset; +} +static int dissect_national_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_INTEGER_M32768_32767(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_national); +} +static int dissect_nationaler_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_INTEGER_M32768_32767(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_nationaler); } -static void -param_cdma_so(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) -{ - gint32 so; - guint saved_offset; - const gchar *str = NULL; - SHORT_DATA_CHECK(len, 2); - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 2, &so); +static int +dissect_ansi_map_PrivateOperationCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 39 "ansi_map.cnf" + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + &OperationCode); - switch (so) - { - case 1: str = "Basic Variable Rate Voice Service (8 kbps)"; break; - case 2: str = "Mobile Station Loopback (8 kbps)"; break; - case 3: str = "Enhanced Variable Rate Voice Service (8 kbps)"; break; - case 4: str = "Asynchronous Data Service (9.6 kbps)"; break; - case 5: str = "Group 3 Facsimile (9.6 kbps)"; break; - case 6: str = "Short Message Services (Rate Set 1)"; break; - case 7: str = "Packet Data Service: Internet or ISO Protocol Stack (9.6 kbps)"; break; - case 8: str = "Packet Data Service: CDPD Protocol Stack (9.6 kbps)"; break; - case 9: str = "Mobile Station Loopback (13 kbps)"; break; - case 10: str = "STU-III Transparent Service"; break; - case 11: str = "STU-III Non-Transparent Service"; break; - case 12: str = "Asynchronous Data Service (14.4 or 9.6 kbps)"; break; - case 13: str = "Group 3 Facsimile (14.4 or 9.6 kbps)"; break; - case 14: str = "Short Message Services (Rate Set 2)"; break; - case 15: str = "Packet Data Service: Internet or ISO Protocol Stack (14.4 kbps)"; break; - case 16: str = "Packet Data Service: CDPD Protocol Stack (14.4 kbps)"; break; - case 17: str = "High Rate Voice Service (13 kbps)"; break; - case 32768: str = "QCELP (13 kbps)"; break; - case 18: str = "Over-the-Air Parameter Administration (Rate Set 1)"; break; - case 19: str = "Over-the-Air Parameter Administration (Rate Set 2)"; break; - case 20: str = "Group 3 Analog Facsimile (Rate Set 1)"; break; - case 21: str = "Group 3 Analog Facsimile (Rate Set 2)"; break; - case 22: str = "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS1 forward, RS1 reverse)"; break; - case 23: str = "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS1 forward, RS2 reverse)"; break; - case 24: str = "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS2 forward, RS1 reverse)"; break; - case 25: str = "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS2 forward, RS2 reverse)"; break; - case 26: str = "High Speed Packet Data Service: CDPD Protocol Stack (RS1 forward, RS1 reverse)"; break; - case 27: str = "High Speed Packet Data Service: CDPD Protocol Stack (RS1 forward, RS2 reverse)"; break; - case 28: str = "High Speed Packet Data Service: CDPD Protocol Stack (RS2 forward, RS1 reverse)"; break; - case 29: str = "High Speed Packet Data Service: CDPD Protocol Stack (RS2 forward, RS2 reverse)"; break; - case 30: str = "Supplemental Channel Loopback Test for Rate Set 1"; break; - case 31: str = "Supplemental Channel Loopback Test for Rate Set 2"; break; - case 32: str = "Test Data Service Option (TDSO)"; break; - case 33: str = "cdma2000 High Speed Packet Data Service, Internet or ISO Protocol Stack"; break; - case 34: str = "cdma2000 High Speed Packet Data Service, CDPD Protocol Stack"; break; - case 35: str = "Location Services, Rate Set 1 (9.6 kbps)"; break; - case 36: str = "Location Services, Rate Set 2 (14.4 kbps)"; break; - case 37: str = "ISDN Interworking Service (64 kbps)"; break; - case 38: str = "GSM Voice"; break; - case 39: str = "GSM Circuit Data"; break; - case 40: str = "GSM Packet Data"; break; - case 41: str = "GSM Short Message Service"; break; - case 42: str = "None Reserved for MC-MAP standard service options"; break; - case 54: str = "Markov Service Option (MSO)"; break; - case 55: str = "Loopback Service Option (LSO)"; break; - case 56: str = "Selectable Mode Vocoder"; break; - case 57: str = "32 kbps Circuit Video Conferencing"; break; - case 58: str = "64 kbps Circuit Video Conferencing"; break; - case 59: str = "HRPD Accounting Records Identifier"; break; - case 60: str = "Link Layer Assisted Robust Header Compression (LLA ROHC) - Header Removal"; break; - case 61: str = "Link Layer Assisted Robust Header Compression (LLA ROHC) - Header Compression"; break; - case 62: str = "- 4099 None Reserved for standard service options"; break; - case 4100: str = "Asynchronous Data Service, Revision 1 (9.6 or 14.4 kbps)"; break; - case 4101: str = "Group 3 Facsimile, Revision 1 (9.6 or 14.4 kbps)"; break; - case 4102: str = "Reserved for standard service option"; break; - case 4103: str = "Packet Data Service: Internet or ISO Protocol Stack, Revision 1 (9.6 or 14.4 kbps)"; break; - case 4104: str = "Packet Data Service: CDPD Protocol Stack, Revision 1 (9.6 or 14.4 kbps)"; break; - default: - if ((so >= 4105) && (so <= 32767)) { str = "Reserved for standard service options"; } - else if ((so >= 32769) && (so <= 32771)) { str = "Proprietary QUALCOMM Incorporated"; } - else if ((so >= 32772) && (so <= 32775)) { str = "Proprietary OKI Telecom"; } - else if ((so >= 32776) && (so <= 32779)) { str = "Proprietary Lucent Technologies"; } - else if ((so >= 32780) && (so <=32783)) { str = "Nokia"; } - else if ((so >= 32784) && (so <=32787)) { str = "NORTEL NETWORKS"; } - else if ((so >= 32788) && (so <=32791)) { str = "Sony Electronics Inc."; } - else if ((so >= 32792) && (so <=32795)) { str = "Motorola"; } - else if ((so >= 32796) && (so <=32799)) { str = "QUALCOMM Incorporated"; } - else if ((so >= 32800) && (so <=32803)) { str = "QUALCOMM Incorporated"; } - else if ((so >= 32804) && (so <=32807)) { str = "QUALCOMM Incorporated"; } - else if ((so >= 32808) && (so <=32811)) { str = "QUALCOMM Incorporated"; } - else if ((so >= 32812) && (so <=32815)) { str = "Lucent Technologies"; } - else if ((so >= 32816) && (so <=32819)) { str = "Denso International"; } - else if ((so >= 32820) && (so <=32823)) { str = "Motorola"; } - else if ((so >= 32824) && (so <=32827)) { str = "Denso International"; } - else if ((so >= 32828) && (so <=32831)) { str = "Denso International"; } - else if ((so >= 32832) && (so <=32835)) { str = "Denso International"; } - else if ((so >= 32836) && (so <=32839)) { str = "NEC America"; } - else if ((so >= 32840) && (so <=32843)) { str = "Samsung Electronics"; } - else if ((so >= 32844) && (so <=32847)) { str = "Texas Instruments Incorporated"; } - else if ((so >= 32848) && (so <=32851)) { str = "Toshiba Corporation"; } - else if ((so >= 32852) && (so <=32855)) { str = "LG Electronics Inc."; } - else if ((so >= 32856) && (so <=32859)) { str = "VIA Telecom Inc."; } - else { str = "Reserved"; } - break; - } + proto_tree_add_item(tree, hf_ansi_map_op_code_fam, tvb, offset-2,1,FALSE); + proto_tree_add_item(tree, hf_ansi_map_op_code, tvb, offset-1,1,FALSE); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s %u/0x%04x", - str, so, so); - g_snprintf(add_string, string_len, " - (SO=0x%04x)", so); - EXTRANEOUS_DATA_CHECK(len, 2); + return offset; +} +static int dissect_private_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PrivateOperationCode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_private); } -static void -param_tdma_sc(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static const value_string ansi_map_OperationCode_vals[] = { + { 16, "national" }, + { 17, "private" }, + { 0, NULL } +}; - switch (value) - { - case 0: str = "Analog Speech Only"; break; - case 1: str = "Digital Speech Only"; break; - case 2: str = "Analog or Digital Speech, Analog Preferred"; break; - case 3: str = "Analog or Digital Speech, Digital Preferred"; break; - case 4: str = "Asynchronous Data"; break; - case 5: str = "G3 Fax"; break; - case 6: str = "Not Used (Service Rejected)"; break; - case 7: str = "STU III (Secure Telephone Unit)"; break; - default: - str = "Reserved, treat as Analog Speech Only"; - break; - } +static const ber_choice_t OperationCode_choice[] = { + { 16, BER_CLASS_PRI, 16, BER_FLAGS_IMPLTAG, dissect_national_impl }, + { 17, BER_CLASS_PRI, 17, BER_FLAGS_IMPLTAG, dissect_private_impl }, + { 0, 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s %u", - str, value); +static int +dissect_ansi_map_OperationCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + OperationCode_choice, hf_index, ett_ansi_map_OperationCode, + NULL); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_operationCode(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_OperationCode(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_operationCode); } -static void -param_dmh_red_ind(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 redind; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_InvokeParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 23 "ansi_map.cnf" + proto_tree_add_item(tree, hf_ansi_map_invokeParameters, tvb, offset,-1,FALSE); + offset = dissect_invokeData(pinfo, tree, tvb, offset); - asn1_int32_value_decode(asn1, 1, &redind); - switch (redind) - { - case 0: str = "Not used"; break; - case 1: str = "Call Forwarding Unconditional (CFU)"; break; - case 2: str = "Call Forwarding Busy (CFB)"; break; - case 3: str = "Call Forwarding No Answer (CFNA)"; break; - case 4: str = "Call Forwarding Other (CFO)"; break; - case 5: str = "CD Unspecified"; break; - case 6: str = "CD PSTN"; break; - case 7: str = "CD Private"; break; - case 8: str = "PSTN Tandem"; break; - case 9: str = "Private Tandem"; break; - case 10: str = "Busy"; break; - case 11: str = "Inactive"; break; - case 12: str = "Unassigned"; break; - case 13: str = "Termination Denied"; break; - case 14: str = "CD Failure"; break; - case 15: str = "Explicit Call Transfer (ECT)"; break; - case 16: str = "Mobile Access Hunting (MAH)"; break; - case 17: str = "Flexible Alerting (FA)"; break; - case 18: str = "Abandoned Call Leg"; break; - case 19: str = "Password Call Acceptance (PCA) Call Refused"; break; - case 20: str = "Selective Call Acceptance (SCA) Call Refused"; break; - case 21: str = "Dialogue"; break; - case 22: str = "Call Forwarding Default (CFD)"; break; - case 23: str = "CD Local"; break; - case 24: str = "Voice Mail Retrieval"; break; - default: - if ((redind >= 25) && (redind <= 127)) - { - str = "Reserved/Unknown"; - } - else - { - str = "Reserved for bilateral agreements"; - } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s (%u)", - str, redind); + return offset; +} +static int dissect_invokeParameters_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_InvokeParameters(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_invokeParameters); } -static void -param_cic(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) -{ - gint32 tg, mem; - guint saved_offset; - EXACT_DATA_CHECK(len, 2); +static const ber_sequence_t InvokePDU_sequence[] = { + { BER_CLASS_PRI, 15, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_componentIDs_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_operationCode }, + { BER_CLASS_PRI, 18, BER_FLAGS_IMPLTAG, dissect_invokeParameters_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_InvokePDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + InvokePDU_sequence, hf_index, ett_ansi_map_InvokePDU); + + return offset; +} +static int dissect_invokeLast_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_InvokePDU(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_invokeLast); +} +static int dissect_invokeNotLast_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_InvokePDU(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_invokeNotLast); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &tg); - asn1_int32_value_decode(asn1, 1, &mem); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len, - "Trunk Group %u Member %u", - tg, mem); +static int +dissect_ansi_map_ComponentID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - g_snprintf(add_string, string_len, "- (%u/%u)", tg, mem); + return offset; +} +static int dissect_componentID(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ComponentID(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_componentID); } -static void -param_qic(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 qic; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_ReturnParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 27 "ansi_map.cnf" + if(tvb_length_remaining(tvb, offset)<=0){ + return offset; + } + + proto_tree_add_item(tree, hf_ansi_map_returnResult, tvb, offset,-1,FALSE); + offset = dissect_returnData(pinfo, tree, tvb, offset); - asn1_int32_value_decode(asn1, 1, &qic); - switch (qic) - { - case 0: str = "Not used"; break; - case 1: str = "No information"; break; - case 2: str = "Validation only"; break; - case 3: str = "Validation and profile"; break; - case 4: str = "Profile only"; break; - default: - if ((qic >= 5) && (qic <= 223)) - { - str = "Reserved, treat as Validation and profile"; - } - else - { - str = "Reserved for extension, treat as Validation and profile"; - } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); + return offset; +} +static int dissect_returnResult_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ReturnParameters(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_returnResult); } -static void -param_feat_result(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); +static const ber_sequence_t ReturnResultPDU_sequence[] = { + { BER_CLASS_PRI, 15, BER_FLAGS_NOOWNTAG, dissect_componentID }, + { BER_CLASS_PRI, 18, BER_FLAGS_IMPLTAG, dissect_returnResult_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_ReturnResultPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ReturnResultPDU_sequence, hf_index, ett_ansi_map_ReturnResultPDU); + + return offset; +} +static int dissect_returnResultLast_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ReturnResultPDU(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_returnResultLast); +} +static int dissect_returnResultNotLast_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ReturnResultPDU(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_returnResultNotLast); +} - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Unsuccessful"; break; - case 2: str = "Successful"; break; - default: - if ((value >= 3) && (value <= 95)) { str = "Reserved, treat as Unsuccessful"; } - else if ((value >= 96) && (value <= 127)) { str = "Reserved, treat as Unsuccessful"; } - else if ((value >= 128) && (value <= 223)) { str = "Reserved, treat as Successful"; } - else { str = "Reserved for protocol extension, treat as Successful"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static int +dissect_ansi_map_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_privateer_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_INTEGER(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_privateer); } -const gchar *calling_feat_ind_str[] = { - "Not used", - "Not authorized", - "Authorized but de-activated", - "Authorized and activated" + +static const value_string ansi_map_ErrorCode_vals[] = { + { 19, "nationaler" }, + { 20, "privateer" }, + { 0, NULL } }; -static void -param_calling_feat_ind(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - - SHORT_DATA_CHECK(len, 2); - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Call Waiting Feature Activity (CW-FA), %s", - bigbuf, - calling_feat_ind_str[(value & 0xc0) >> 6]); - - other_decode_bitfield_value(bigbuf, value, 0x30, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Call Forwarding No Answer Feature Activity (CFNA-FA), %s", - bigbuf, - calling_feat_ind_str[(value & 0x30) >> 4]); - - other_decode_bitfield_value(bigbuf, value, 0x0c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Call Forwarding Busy Feature Activity (CFB-FA), %s", - bigbuf, - calling_feat_ind_str[(value & 0x0c) >> 2]); - - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Call Forwarding Unconditional Feature Activity (CFU-FA), %s", - bigbuf, - calling_feat_ind_str[value & 0x03]); - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Call Transfer Feature Activity (CT-FA), %s", - bigbuf, - calling_feat_ind_str[(value & 0xc0) >> 6]); - - other_decode_bitfield_value(bigbuf, value, 0x30, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Voice Privacy Feature Activity (VP-FA), %s", - bigbuf, - calling_feat_ind_str[(value & 0x30) >> 4]); - - other_decode_bitfield_value(bigbuf, value, 0x0c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Call Delivery Feature Activity (CD-FA), %s", - bigbuf, - calling_feat_ind_str[(value & 0x0c) >> 2]); - - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Three-Way Calling Feature Activity (3WC-FA), %s", - bigbuf, - calling_feat_ind_str[value & 0x03]); - - if (len == 2) return; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Calling Number ID Restriction Override Feature Activity (CNIROver-FA), %s", - bigbuf, - calling_feat_ind_str[(value & 0xc0) >> 6]); - - other_decode_bitfield_value(bigbuf, value, 0x30, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Calling Number ID Restriction Feature Activity (CNIR-FA), %s", - bigbuf, - calling_feat_ind_str[(value & 0x30) >> 4]); - - other_decode_bitfield_value(bigbuf, value, 0x0c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Two number Calling Number ID Presentation Feature Activity (CNIP2-FA), %s", - bigbuf, - calling_feat_ind_str[(value & 0x0c) >> 2]); - - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : One number Calling Number ID Presentation Feature Activity (CNIP1-FA), %s", - bigbuf, - calling_feat_ind_str[value & 0x03]); - - if (len == 3) return; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : USCF divert to voice mail Feature Activity (USCFvm-FA), %s", - bigbuf, - calling_feat_ind_str[(value & 0xc0) >> 6]); - - other_decode_bitfield_value(bigbuf, value, 0x30, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Answer Hold Feature Activity (AH-FA), %s", - bigbuf, - calling_feat_ind_str[(value & 0x30) >> 4]); - - other_decode_bitfield_value(bigbuf, value, 0x0c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Data Privacy Feature Activity (DP-FA), %s", - bigbuf, - calling_feat_ind_str[(value & 0x0c) >> 2]); - - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Priority Call Waiting Feature Activity (PCW-FA), %s", - bigbuf, - calling_feat_ind_str[value & 0x03]); - - if (len == 4) return; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : CDMA-Concurrent Service Feature Activity (CCS-FA), %s", - bigbuf, - calling_feat_ind_str[(value & 0xc0) >> 6]); - - other_decode_bitfield_value(bigbuf, value, 0x30, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : CDMA-Packet Data Service Feature Activity (CPDS-FA), %s", - bigbuf, - calling_feat_ind_str[(value & 0x30) >> 4]); - - other_decode_bitfield_value(bigbuf, value, 0x0c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : USCF divert to network registered DN Feature Activity (USCFnr-FA), %s", - bigbuf, - calling_feat_ind_str[(value & 0x0c) >> 2]); - - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : USCF divert to mobile station provided DN Feature Activity (USCFms-FA), %s", - bigbuf, - calling_feat_ind_str[value & 0x03]); - - if (len == 5) return; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xfc, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : TDMA Enhanced Privacy and Encryption Feature Activity (TDMA EPE-FA), %s", - bigbuf, - calling_feat_ind_str[value & 0x03]); - - EXTRANEOUS_DATA_CHECK(len, 6); +static const ber_choice_t ErrorCode_choice[] = { + { 19, BER_CLASS_PRI, 19, BER_FLAGS_IMPLTAG, dissect_nationaler_impl }, + { 20, BER_CLASS_PRI, 20, BER_FLAGS_IMPLTAG, dissect_privateer_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_ErrorCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + ErrorCode_choice, hf_index, ett_ansi_map_ErrorCode, + NULL); + + return offset; +} +static int dissect_errorCode(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ErrorCode(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_errorCode); } -static void -param_usage_ind(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_RejectParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 37 "ansi_map.cnf" - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Unspecified"; break; - case 1: str = "Sent-paid call"; break; - case 2: str = "3rd number bill"; break; - default: - str = "Reserved, treat as Unspecified"; - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s (%u)", - str, - value); + return offset; +} +static int dissect_parameterre(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RejectParameters(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_parameterre); +} +static int dissect_parameterrj(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RejectParameters(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_parameterrj); } -const gchar *tdma_data_feat_ind_str[] = { - "Not used", - "Not authorized", - "Authorized but de-activated", - "Authorized and activated" + +static const ber_sequence_t ReturnErrorPDU_sequence[] = { + { BER_CLASS_PRI, 15, BER_FLAGS_NOOWNTAG, dissect_componentID }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_errorCode }, + { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_parameterre }, + { 0, 0, 0, NULL } }; -static void -param_tdma_data_feat_ind(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - - SHORT_DATA_CHECK(len, 2); - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x30, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : STU-III Feature Activity (STUIII-FA), %s", - bigbuf, - tdma_data_feat_ind_str[(value & 0x30) >> 4]); - - other_decode_bitfield_value(bigbuf, value, 0x0c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : G3 Fax Feature Activity (G3FAX-FA), %s", - bigbuf, - tdma_data_feat_ind_str[(value & 0x0c) >> 2]); - - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : ADS Feature Activity (ADS-FA), %s", - bigbuf, - tdma_data_feat_ind_str[value & 0x03]); - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Triple Rate data Feature Activity (3RATE-FA), %s", - bigbuf, - tdma_data_feat_ind_str[(value & 0xc0) >> 6]); - - other_decode_bitfield_value(bigbuf, value, 0x30, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Double Rate data Feature Activity (2RATE-FA), %s", - bigbuf, - tdma_data_feat_ind_str[(value & 0x30) >> 4]); - - other_decode_bitfield_value(bigbuf, value, 0x0c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Full Rate data Feature Activity (FRATE-FA), %s", - bigbuf, - tdma_data_feat_ind_str[(value & 0x0c) >> 2]); - - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Half Rate data Feature Activity (HRATE-FA), %s", - bigbuf, - tdma_data_feat_ind_str[value & 0x03]); - - EXTRANEOUS_DATA_CHECK(len, 2); +static int +dissect_ansi_map_ReturnErrorPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ReturnErrorPDU_sequence, hf_index, ett_ansi_map_ReturnErrorPDU); + + return offset; +} +static int dissect_returnError_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ReturnErrorPDU(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_returnError); } -static void -param_faulty(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - gint idx; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static const value_string ansi_map_ProblemPDU_vals[] = { + { 257, "general-unrecognisedComponentType" }, + { 258, "general-incorrectComponentPortion" }, + { 259, "general-badlyStructuredCompPortion" }, + { 0, NULL } +}; - str = match_strval_idx((guint32) value, ansi_param_1_strings, &idx); - if (NULL == str) - { - if (len < 2) - { - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len, - "Unrecognized parameter ID"); - return; - } +static int +dissect_ansi_map_ProblemPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1->offset = saved_offset; - asn1_uint32_value_decode(asn1, 2, &value); + return offset; +} +static int dissect_rejectProblem_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ProblemPDU(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_rejectProblem); +} - str = match_strval_idx((guint32) value, ansi_param_2_strings, &idx); - if (NULL == str) - { - if (len < 3) - { - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len, - "Unrecognized parameter ID"); - return; - } - - asn1->offset = saved_offset; - asn1_int32_value_decode(asn1, 3, &value); - - str = match_strval_idx((guint32) value, ansi_param_3_strings, &idx); - - if (NULL == str) - { - if (((value >= 0x9FFF00) && (value <= 0x9FFF7F)) || - ((value >= 0xBFFF00) && (value <= 0xBFFF7F))) - { - str = "Reserved for protocol extension"; - } - else if (((value >= 0x9FFE76) && (value <= 0x9FFE7F)) || - ((value >= 0xBFFE76) && (value <= 0xBFFE7F))) - { - str = "Reserved for National Network Use"; - } - else - { - str = "Unrecognized parameter ID"; - } - } - } - } +static const ber_sequence_t RejectPDU_sequence[] = { + { BER_CLASS_PRI, 15, BER_FLAGS_NOOWNTAG, dissect_componentID }, + { BER_CLASS_PRI, 21, BER_FLAGS_IMPLTAG, dissect_rejectProblem_impl }, + { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_parameterrj }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static int +dissect_ansi_map_RejectPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + RejectPDU_sequence, hf_index, ett_ansi_map_RejectPDU); - EXTRANEOUS_DATA_CHECK(len, asn1->offset - saved_offset); + return offset; +} +static int dissect_reject_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RejectPDU(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_reject); } -static void -param_sys_type_code(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 sys_type_code; - guint saved_offset; - const gchar *str = NULL; - - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static const value_string ansi_map_ComponentPDU_vals[] = { + { 9, "invokeLast" }, + { 10, "returnResultLast" }, + { 11, "returnError" }, + { 12, "reject" }, + { 13, "invokeNotLast" }, + { 14, "returnResultNotLast" }, + { 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &sys_type_code); +static const ber_choice_t ComponentPDU_choice[] = { + { 9, BER_CLASS_PRI, 9, BER_FLAGS_IMPLTAG, dissect_invokeLast_impl }, + { 10, BER_CLASS_PRI, 10, BER_FLAGS_IMPLTAG, dissect_returnResultLast_impl }, + { 11, BER_CLASS_PRI, 11, BER_FLAGS_IMPLTAG, dissect_returnError_impl }, + { 12, BER_CLASS_PRI, 12, BER_FLAGS_IMPLTAG, dissect_reject_impl }, + { 13, BER_CLASS_PRI, 13, BER_FLAGS_IMPLTAG, dissect_invokeNotLast_impl }, + { 14, BER_CLASS_PRI, 14, BER_FLAGS_IMPLTAG, dissect_returnResultNotLast_impl }, + { 0, 0, 0, 0, NULL } +}; - switch (sys_type_code) - { - case 0: str = "Not used"; break; - case 1: str = "EDS"; break; - case 2: str = "Astronet"; break; - case 3: str = "Lucent Technologies"; break; - case 4: str = "Ericsson"; break; - case 5: str = "GTE"; break; - case 6: str = "Motorola"; break; - case 7: str = "NEC"; break; - case 8: str = "NORTEL"; break; - case 9: str = "NovAtel"; break; - case 10: str = "Plexsys"; break; - case 11: str = "Digital Equipment Corp"; break; - case 12: str = "INET"; break; - case 13: str = "Bellcore"; break; - case 14: str = "Alcatel SEL"; break; - case 15: str = "Compaq (Tandem)"; break; - case 16: str = "QUALCOMM"; break; - case 17: str = "Aldiscon"; break; - case 18: str = "Celcore"; break; - case 19: str = "TELOS"; break; - case 20: str = "ADI Limited (Stanilite)"; break; - case 21: str = "Coral Systems"; break; - case 22: str = "Synacom Technology"; break; - case 23: str = "DSC"; break; - case 24: str = "MCI"; break; - case 25: str = "NewNet"; break; - case 26: str = "Sema Group Telecoms"; break; - case 27: str = "LG Information and Communications"; break; - case 28: str = "CBIS"; break; - case 29: str = "Siemens"; break; - case 30: str = "Samsung Electronics"; break; - case 31: str = "ReadyCom Inc."; break; - case 32: str = "AG Communication Systems"; break; - case 33: str = "Hughes Network Systems"; break; - case 34: str = "Phoenix Wireless Group"; break; - default: - str = "Reserved/Unknown"; - break; - } +static int +dissect_ansi_map_ComponentPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + ComponentPDU_choice, hf_index, ett_ansi_map_ComponentPDU, + NULL); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Vendor ID (%u) %s", - sys_type_code, str); + return offset; } -static void -param_ext_sys_type_code(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) -{ - gint32 type; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 2); - saved_offset = asn1->offset; +static int +dissect_ansi_map_ErrorParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 35 "ansi_map.cnf" - asn1_int32_value_decode(asn1, 1, &type); - switch (type) - { - case 0: str = "Not specified"; break; - case 1: str = "Serving MSC"; break; - case 2: str = "Home MSC"; break; - case 3: str = "Gateway MSC"; break; - case 4: str = "HLR"; break; - case 5: str = "VLR"; break; - case 6: str = "EIR (reserved)"; break; - case 7: str = "AC"; break; - case 8: str = "Border MSC"; break; - case 9: str = "Originating MSC"; break; - default: - if ((type >= 10) && (type <= 223)) { str = "Reserved, treat as Not specified"; } - else { str = "Reserved for protocol extension, treat as Not specified"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Type (%u) %s", - type, - str); + return offset; +} - param_sys_type_code(asn1, tree, len-1, add_string, string_len); + + +static int +dissect_ansi_map_ElectronicSerialNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_electronicSerialNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ElectronicSerialNumber(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_electronicSerialNumber); +} +static int dissect_lectronicSerialNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ElectronicSerialNumber(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_lectronicSerialNumber); } -static void -param_cdma_sea_win(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_MINType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 44 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_min_type(parameter_tvb,pinfo,tree); + } - asn1_int32_value_decode(asn1, 1, &value); - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x0f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Value %u", - bigbuf, - value & 0x0f); + return offset; } -static void -param_cdma_sea_param(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - SHORT_DATA_CHECK(len, 4); - saved_offset = asn1->offset; +static int +dissect_ansi_map_MobileIdentificationNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_MINType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_mobileIdentificationNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_MobileIdentificationNumber(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_mobileIdentificationNumber); +} - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x0f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : CDMA Search Window, %u", - bigbuf, - value & 0x0f); +static const value_string ansi_map_MSID_vals[] = { + { 8, "mobileIdentificationNumber" }, + { 242, "imsi" }, + { 0, NULL } +}; - saved_offset = asn1->offset; +static const ber_choice_t MSID_choice[] = { + { 8, BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { 242, BER_CLASS_CON, 242, BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { 0, 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_MSID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + MSID_choice, hf_index, ett_ansi_map_MSID, + NULL); - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); + return offset; +} +static int dissect_msid(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_MSID(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_msid); +} - other_decode_bitfield_value(bigbuf, value, 0x3f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : T_ADD, %u", - bigbuf, - value & 0x3f); - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_AuthenticationAlgorithmVersion(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); + return offset; +} +static int dissect_authenticationAlgorithmVersion_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AuthenticationAlgorithmVersion(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_authenticationAlgorithmVersion); +} - other_decode_bitfield_value(bigbuf, value, 0x3f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : T_DROP, %u", - bigbuf, - value & 0x3f); - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_AuthenticationResponseReauthentication(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : T_TDROP, %u", - bigbuf, - value & 0xf0); + return offset; +} +static int dissect_authenticationResponseReauthentication_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AuthenticationResponseReauthentication(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_authenticationResponseReauthentication); +} - other_decode_bitfield_value(bigbuf, value, 0x0f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : T_COMP, %u", - bigbuf, - value & 0x0f); - EXTRANEOUS_DATA_CHECK(len, 4); -} -static void -param_cdma_code_chan(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; +static int +dissect_ansi_map_AuthenticationResponseUniqueChallenge(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - saved_offset = asn1->offset; + return offset; +} +static int dissect_authenticationResponseUniqueChallenge_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AuthenticationResponseUniqueChallenge(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_authenticationResponseUniqueChallenge); +} - asn1_int32_value_decode(asn1, 1, &value); - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x3f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : CDMA Code Channel %u", - bigbuf, - value & 0x3f); +static int +dissect_ansi_map_CallHistoryCount(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_callHistoryCount_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CallHistoryCount(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_callHistoryCount); } -static void -param_chan_data(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - SHORT_DATA_CHECK(len, 3); - saved_offset = asn1->offset; +static int +dissect_ansi_map_CDMAPrivateLongCodeMask(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_cdmaPrivateLongCodeMask_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAPrivateLongCodeMask(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaPrivateLongCodeMask); +} - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : SAT Color Code %u", - bigbuf, - (value & 0xc0 >> 6)); - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - (value & 0x20) ? "Reserved" : "Analog Band Class", - bigbuf); - switch ((value & 0x18) >> 3) - { - case 0: str = "DTX disabled (not active/acceptable)"; break; - case 1: str = "Reserved, treat as DTX disabled"; break; - case 2: str = "DTX-low mode (i.e., 8 dB below DTX active/acceptable)"; break; - case 3: str = "DTX mode active or acceptable"; break; - } +static int +dissect_ansi_map_DigitsType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 51 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_digits_type(parameter_tvb,pinfo,tree); + } + - other_decode_bitfield_value(bigbuf, value, 0x18, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, - str); - other_decode_bitfield_value(bigbuf, value, 0x07, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Voice Mobile Attenuation Code (VMAC) %u", - bigbuf, - value & 0x07); + return offset; +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 2, &value); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Channel Number %u", - value); +static int +dissect_ansi_map_CarrierDigits(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - EXTRANEOUS_DATA_CHECK(len, 3); + return offset; +} +static int dissect_carrierDigits_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CarrierDigits(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_carrierDigits); } -static void -param_cdma_plcm(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - EXACT_DATA_CHECK(len, 6); +static const value_string ansi_map_DenyAccess_vals[] = { + { 0, "not-used" }, + { 1, "unspecified" }, + { 2, "ssd-Update-failure" }, + { 3, "cOUNT-Update-failure" }, + { 4, "unique-Challenge-failure" }, + { 5, "aUTHR-mismatch" }, + { 6, "cOUNT-mismatch" }, + { 7, "process-collision" }, + { 8, "missing-authentication-parameters" }, + { 9, "terminalType-mismatch" }, + { 10, "mIN-IMSI-or-ESN-authorization-failure" }, + { 0, NULL } +}; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_DenyAccess(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0xfc, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); + return offset; +} +static int dissect_denyAccess_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DenyAccess(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_denyAccess); +} - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : CDMA Private Long Code Mask (PLCM) (MSB)", - bigbuf); - saved_offset = asn1->offset; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len - 1, - "CDMA Private Long Code Mask (PLCM)"); +static int +dissect_ansi_map_DestinationDigits(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - asn1->offset += (len - 1); + return offset; +} +static int dissect_destinationDigits_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DestinationDigits(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_destinationDigits); } -static void -param_ctrl_chan_data(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - EXACT_DATA_CHECK(len, 4); - saved_offset = asn1->offset; +static int +dissect_ansi_map_LocationAreaID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_locationAreaID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_LocationAreaID(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_locationAreaID); +} - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Digital Color Code (DCC)", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x38, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x07, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Control Mobile Attenuation Code (CMAC)", - bigbuf); +static int +dissect_ansi_map_RandomVariableReauthentication(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_randomVariableReauthentication_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RandomVariableReauthentication(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_randomVariableReauthentication); +} + + - saved_offset = asn1->offset; +static int +dissect_ansi_map_MobileStationMIN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_MINType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - asn1_int32_value_decode(asn1, 2, &value); + return offset; +} +static int dissect_mobileStationMIN_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_MobileStationMIN(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_mobileStationMIN); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Channel Number (CHNO), %u", - value); - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_MSCID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 193 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_mscid(parameter_tvb,pinfo,tree); + } - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x0c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Supplementary Digital Color Codes (SDCC1)", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Supplementary Digital Color Codes (SDCC2)", - bigbuf); + return offset; +} +static int dissect_mscid_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_MSCID(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_mscid); } -static void -param_cdma_chan_data(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value, temp_int; - guint saved_offset; - const gchar *str = NULL; - - SHORT_DATA_CHECK(len, 8); - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 2, &value); - - other_decode_bitfield_value(bigbuf, value >> 8, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 1, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value >> 8, 0x78, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 1, - "%s : Frame Offset (%u), %.2f ms", - bigbuf, - (value & 0x7800) >> 11, - ((value & 0x7800) >> 11) * 1.25); - - other_decode_bitfield_value(bigbuf, value >> 8, 0x07, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 1, - "%s : CDMA Channel Number (MSB), %u", - bigbuf, - value & 0x07ff); - - other_decode_bitfield_value(bigbuf, value & 0x00ff, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset+1, 1, - "%s : CDMA Channel Number (LSB)", - bigbuf); - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - temp_int = (value & 0x7c) >> 2; - if ((temp_int < 0) || (temp_int >= (gint) NUM_BAND_CLASS_STR)) - { - str = "Reserved"; - } - else - { - str = band_class_str[temp_int]; - } - other_decode_bitfield_value(bigbuf, value, 0x7c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Band Class, %s", - bigbuf, - str); - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Long Code Mask (MSB)", - bigbuf); +static int +dissect_ansi_map_RandomVariableSSD(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_randomVariableSSD_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RandomVariableSSD(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_randomVariableSSD); +} - other_decode_bitfield_value(bigbuf, value, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset + 1, 1, - "%s : Long Code Mask", - bigbuf); - asn1_int32_value_decode(asn1, 1, &value); - other_decode_bitfield_value(bigbuf, value, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset + 2, 1, - "%s : Long Code Mask", - bigbuf); +static int +dissect_ansi_map_RandomVariableUniqueChallenge(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_randomVariableUniqueChallenge_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RandomVariableUniqueChallenge(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_randomVariableUniqueChallenge); +} - other_decode_bitfield_value(bigbuf, value, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset + 3, 1, - "%s : Long Code Mask", - bigbuf); - asn1_int32_value_decode(asn1, 1, &value); - other_decode_bitfield_value(bigbuf, value, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset + 4, 1, - "%s : Long Code Mask", - bigbuf); +static int +dissect_ansi_map_RoutingDigits(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_routingDigits_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RoutingDigits(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_routingDigits); +} +static int dissect_outingDigits_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RoutingDigits(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_outingDigits); +} - other_decode_bitfield_value(bigbuf, value, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset + 5, 1, - "%s : Long Code Mask (LSB)", - bigbuf); - if (len == 8) return; - saved_offset = asn1->offset; +static int +dissect_ansi_map_SenderIdentificationNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_senderIdentificationNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SenderIdentificationNumber(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_senderIdentificationNumber); +} - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : NP Extension", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x78, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Nominal Power, %u", - bigbuf, - (value & 0x78) >> 3); - other_decode_bitfield_value(bigbuf, value, 0x07, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Number Preamble, %u", - bigbuf, - value & 0x07); +static int +dissect_ansi_map_SharedSecretData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - if (len == 9) return; + return offset; +} +static int dissect_sharedSecretData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SharedSecretData(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sharedSecretData); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Base Station Protocol Revision, %u", - value); +static int +dissect_ansi_map_SignalingMessageEncryptionKey(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - EXTRANEOUS_DATA_CHECK(len, 10); + return offset; +} +static int dissect_signalingMessageEncryptionKey_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SignalingMessageEncryptionKey(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_signalingMessageEncryptionKey); } -static void -param_namps_chan_data(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; +static const value_string ansi_map_SSDNotShared_vals[] = { + { 0, "not-used" }, + { 1, "discard-SSD" }, + { 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +static int +dissect_ansi_map_SSDNotShared(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - switch ((value & 0x1c) >> 2) - { - case 0: str = "Channel Data parameter SCC field applies"; break; - case 1: str = "Digital SAT Color Code 1 (ignore SCC field)"; break; - case 2: str = "Digital SAT Color Code 2 (ignore SCC field)"; break; - case 3: str = "Digital SAT Color Code 3 (ignore SCC field)"; break; - case 4: str = "Digital SAT Color Code 4 (ignore SCC field)"; break; - case 5: str = "Digital SAT Color Code 5 (ignore SCC field)"; break; - case 6: str = "Digital SAT Color Code 6 (ignore SCC field)"; break; - case 7: str = "Digital SAT Color Code 7 (ignore SCC field)"; break; - } + return offset; +} +static int dissect_ssdnotShared_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SSDNotShared(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_ssdnotShared); +} - other_decode_bitfield_value(bigbuf, value, 0x1c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Color Code Indicator (CCIndicator), %s", - bigbuf, - str); - switch (value & 0x03) - { - case 0: str = "Wide. 30 kHz AMPS voice channel"; break; - case 1: str = "Upper. 10 kHz NAMPS voice channel"; break; - case 2: str = "Middle. 10 kHz NAMPS voice channel"; break; - case 3: str = "Lower. 10 kHz NAMPS voice channel"; break; - } +static const value_string ansi_map_UpdateCount_vals[] = { + { 0, "not-used" }, + { 1, "update-COUNT" }, + { 0, NULL } +}; + - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Narrow Analog Voice Channel Assignment (NAVCA), %s", - bigbuf, - str); +static int +dissect_ansi_map_UpdateCount(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_updateCount_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_UpdateCount(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_updateCount); +} + + +static const ber_sequence_t AuthenticationDirective_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 77, BER_FLAGS_IMPLTAG, dissect_authenticationAlgorithmVersion_impl }, + { BER_CLASS_CON, 182, BER_FLAGS_IMPLTAG, dissect_authenticationResponseReauthentication_impl }, + { BER_CLASS_CON, 37, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authenticationResponseUniqueChallenge_impl }, + { BER_CLASS_CON, 38, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callHistoryCount_impl }, + { BER_CLASS_CON, 67, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaPrivateLongCodeMask_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_denyAccess_impl }, + { BER_CLASS_CON, 87, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_destinationDigits_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 191, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariableReauthentication_impl }, + { BER_CLASS_CON, 184, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileStationMIN_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 42, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariableSSD_impl }, + { BER_CLASS_CON, 43, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariableUniqueChallenge_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 46, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sharedSecretData_impl }, + { BER_CLASS_CON, 45, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_signalingMessageEncryptionKey_impl }, + { BER_CLASS_CON, 52, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ssdnotShared_impl }, + { BER_CLASS_CON, 51, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_updateCount_impl }, + { 0, 0, 0, NULL } +}; - EXTRANEOUS_DATA_CHECK(len, 1); +static int +dissect_ansi_map_AuthenticationDirective(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AuthenticationDirective_set, hf_index, ett_ansi_map_AuthenticationDirective); + + return offset; } -static void -param_cdma_ms_meas_chan_id(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value, temp_int; - guint saved_offset; - const gchar *str = NULL; - SHORT_DATA_CHECK(len, 2); +static const ber_sequence_t AuthenticationDirectiveRes_set[] = { + { BER_CLASS_CON, 38, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callHistoryCount_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_AuthenticationDirectiveRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AuthenticationDirectiveRes_set, hf_index, ett_ansi_map_AuthenticationDirectiveRes); - saved_offset = asn1->offset; + return offset; +} - asn1_int32_value_decode(asn1, 2, &value); - temp_int = (value & 0xf800) >> 11; - if ((temp_int < 0) || (temp_int >= (gint) NUM_BAND_CLASS_STR)) - { - str = "Reserved"; - } - else - { - str = band_class_str[temp_int]; - } - other_decode_bitfield_value(bigbuf, value >> 8, 0xf8, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 1, - "%s : Band Class, %s", - bigbuf, - str); +static int +dissect_ansi_map_InterMSCCircuitID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 168 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_intermsccircuitid(parameter_tvb,pinfo,tree); + } - other_decode_bitfield_value(bigbuf, value >> 8, 0x07, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 1, - "%s : CDMA Channel Number (MSB), %u", - bigbuf, - value & 0x07ff); - other_decode_bitfield_value(bigbuf, value & 0x00ff, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset+1, 1, - "%s : CDMA Channel Number (LSB)", - bigbuf); - EXTRANEOUS_DATA_CHECK(len, 2); + return offset; +} +static int dissect_interMSCCircuitID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_InterMSCCircuitID(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_interMSCCircuitID); } -static void -param_tdma_chan_data(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - SHORT_DATA_CHECK(len, 5); +static const ber_sequence_t AuthenticationDirectiveForward_set[] = { + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 37, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authenticationResponseUniqueChallenge_impl }, + { BER_CLASS_CON, 43, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariableUniqueChallenge_impl }, + { BER_CLASS_CON, 51, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_updateCount_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_AuthenticationDirectiveForward(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AuthenticationDirectiveForward_set, hf_index, ett_ansi_map_AuthenticationDirectiveForward); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - switch (value & 0x1f) - { - case 0: str = "Analog (not used if ChannelData is present)"; break; - case 1: str = "Assigned to timeslot 1, full rate"; break; - case 2: str = "Assigned to timeslot 2, full rate"; break; - case 3: str = "Assigned to timeslot 3, full rate"; break; - case 4: str = "Assigned to timeslots 1, 4 and 2, 5 Double rate"; break; - case 5: str = "Assigned to timeslots 1, 4 and 3, 6 Double rate"; break; - case 6: str = "Assigned to timeslots 2, 5 and 3, 6 Double rate"; break; - case 9: str = "Assigned to timeslot 1, half rate"; break; - case 10: str = "Assigned to timeslot 2, half rate"; break; - case 11: str = "Assigned to timeslot 3, half rate"; break; - case 12: str = "Assigned to timeslot 4, half rate"; break; - case 13: str = "Assigned to timeslot 5, half rate"; break; - case 14: str = "Assigned to timeslot 6, half rate"; break; - case 15: str = "Assigned to timeslot 1, 2, 3, 4, 5, 6 Triple rate"; break; - default: - str = "Reserved, treat as Analog"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x1f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Time Slot and Rate indicator (TSR), %s", - bigbuf, - str); +static int +dissect_ansi_map_CountUpdateReport(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - saved_offset = asn1->offset; + return offset; +} +static int dissect_countUpdateReport_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CountUpdateReport(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_countUpdateReport); +} - asn1_int32_value_decode(asn1, 1, &value); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Digital Verification Color Code (DVCC) %u", - value); - saved_offset = asn1->offset; +static int +dissect_ansi_map_UniqueChallengeReport(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_uniqueChallengeReport_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_UniqueChallengeReport(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_uniqueChallengeReport); +} - switch ((value & 0xf0) >> 4) - { - case 0: str = "800 MHz"; break; - case 1: str = "1800 MHz"; break; - default: - str = "Reserved, treat as 800 MHz"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Hyper Band, %s", - bigbuf, - str); +static const ber_sequence_t AuthenticationDirectiveForwardRes_set[] = { + { BER_CLASS_CON, 138, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_countUpdateReport_impl }, + { BER_CLASS_CON, 124, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uniqueChallengeReport_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x0f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Digital Mobile Attenuation Code (DMAC) %u", - bigbuf, - value & 0x0f); +static int +dissect_ansi_map_AuthenticationDirectiveForwardRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AuthenticationDirectiveForwardRes_set, hf_index, ett_ansi_map_AuthenticationDirectiveForwardRes); + + return offset; +} + + +static const value_string ansi_map_ReportType_vals[] = { + { 0, "not-used" }, + { 1, "unspecified-security-violation" }, + { 2, "mSID-ESN-mismatch" }, + { 3, "rANDC-mismatch" }, + { 4, "reserved" }, + { 5, "sSD-update-failed" }, + { 6, "reserved" }, + { 7, "cOUNT-mismatch" }, + { 8, "reserved" }, + { 9, "unique-Challenge-failed" }, + { 10, "unsolicited-Base-Station-Challenge" }, + { 11, "sSD-Update-no-response" }, + { 12, "cOUNT-Update-no-response" }, + { 13, "unique-Challenge-no-response" }, + { 14, "aUTHR-mismatch" }, + { 15, "tERMTYP-mismatch" }, + { 16, "missing-authentication-parameters" }, + { 0, NULL } +}; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 2, &value); +static int +dissect_ansi_map_ReportType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value >> 8, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 1, - "%s : Channel Number (MSB), %u", - bigbuf, - value); + return offset; +} +static int dissect_reportType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ReportType(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_reportType); +} +static int dissect_reportType2_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ReportType(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_reportType2); +} - other_decode_bitfield_value(bigbuf, value & 0x00ff, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset + 1, 1, - "%s : Channel Number (LSB)", - bigbuf); - EXTRANEOUS_DATA_CHECK(len, 5); -} +static const value_string ansi_map_SystemAccessType_vals[] = { + { 0, "not-used" }, + { 1, "unspecified" }, + { 2, "flash-request" }, + { 3, "autonomous-registration" }, + { 4, "call-origination" }, + { 5, "page-response" }, + { 6, "no-access" }, + { 7, "power-down-registration" }, + { 8, "sms-page-response" }, + { 9, "otasp" }, + { 0, NULL } +}; -static void -param_tdma_call_mode(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %sxtended modulation and framing", - bigbuf, - (value & 0x20) ? "E" : "No e"); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Other voice coding %sacceptable", - bigbuf, - (value & 0x10) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Other DQPSK channel %sacceptable", - bigbuf, - (value & 0x08) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Half rate digital traffic channel %sacceptable", - bigbuf, - (value & 0x04) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Full rate digital traffic channel %sacceptable", - bigbuf, - (value & 0x02) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : AMPS channel %sacceptable", - bigbuf, - (value & 0x01) ? "" : "not "); - - EXTRANEOUS_DATA_CHECK(len, 1); + +static int +dissect_ansi_map_SystemAccessType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_systemAccessType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SystemAccessType(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_systemAccessType); } -static void -param_cdma_call_mode(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_SystemCapabilities(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 285 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_systemcapabilities(parameter_tvb,pinfo,tree); + } - if (len == 1) - { - /* assuming older spec. no IS-880 */ - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - } - else - { - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 450 MHz channel (Band Class 5) %sacceptable", - bigbuf, - (value & 0x80) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Korean PCS channel (Band Class 4) %sacceptable", - bigbuf, - (value & 0x40) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : JTACS channel (Band Class 3) %sacceptable", - bigbuf, - (value & 0x20) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : TACS channel (Band Class 2) %sacceptable", - bigbuf, - (value & 0x10) ? "" : "not "); - } - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : CDMA 1900 MHz channel (Band Class 1) %sacceptable", - bigbuf, - (value & 0x08) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : NAMPS 800 MHz channel %sacceptable", - bigbuf, - (value & 0x04) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : AMPS 800 MHz channel %sacceptable", - bigbuf, - (value & 0x02) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : CDMA 800 MHz channel (Band Class 0) %sacceptable", - bigbuf, - (value & 0x01) ? "" : "not "); - - if (len == 1) return; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Secondary 800 MHz channel (Band Class 10) %sacceptable", - bigbuf, - (value & 0x10) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 900 MHz channel (Band Class 9) %sacceptable", - bigbuf, - (value & 0x08) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 1800 MHz channel (Band Class 8) %sacceptable", - bigbuf, - (value & 0x04) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 700 MHz channel (Band Class 7) %sacceptable", - bigbuf, - (value & 0x02) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 2 GHz channel (Band Class 6) %sacceptable", - bigbuf, - (value & 0x01) ? "" : "not "); - - EXTRANEOUS_DATA_CHECK(len, 2); -} -static void -param_namps_call_mode(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; + return offset; +} +static int dissect_systemCapabilities_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SystemCapabilities(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_systemCapabilities); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +static int +dissect_ansi_map_CallHistoryCountExpected(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_callHistoryCountExpected_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CallHistoryCountExpected(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_callHistoryCountExpected); +} + + +static const value_string ansi_map_TerminalType_vals[] = { + { 0, "not-used" }, + { 1, "not-distinguished" }, + { 2, "iS-54-B" }, + { 3, "iS-136" }, + { 4, "j-STD-011" }, + { 5, "iS-136-A-or-TIA-EIA-136-Revision-0" }, + { 6, "tIA-EIA-136-A" }, + { 7, "iA-EIA-136-B" }, + { 32, "iS-95" }, + { 33, "iS-95B" }, + { 34, "j-STD-008" }, + { 35, "tIA-EIA-95-B" }, + { 36, "iS-2000" }, + { 64, "iS-88" }, + { 65, "iS-94" }, + { 66, "iS-91" }, + { 67, "j-STD-014" }, + { 68, "tIA-EIA-553-A" }, + { 69, "iS-91-A" }, + { 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - ".... %u... : AMPS 1800 MHz channel %sacceptable", - (value & 0x08) >> 3, (value & 0x08) ? "" : "not "); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - ".... .%u.. : NAMPS 1800 MHz channel %sacceptable", - (value & 0x04) >> 2, (value & 0x04) ? "" : "not "); +static int +dissect_ansi_map_TerminalType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_terminalType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TerminalType(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_terminalType); +} + + +static const ber_sequence_t AuthenticationFailureReport_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 44, BER_FLAGS_IMPLTAG, dissect_reportType_impl }, + { BER_CLASS_CON, 34, BER_FLAGS_IMPLTAG, dissect_systemAccessType_impl }, + { BER_CLASS_CON, 49, BER_FLAGS_IMPLTAG, dissect_systemCapabilities_impl }, + { BER_CLASS_CON, 38, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callHistoryCount_impl }, + { BER_CLASS_CON, 79, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callHistoryCountExpected_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 44, BER_FLAGS_IMPLTAG, dissect_reportType2_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 47, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminalType_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - ".... ..%u. : AMPS 800 MHz channel %sacceptable", - (value & 0x02) >> 1, (value & 0x02) ? "" : "not "); +static int +dissect_ansi_map_AuthenticationFailureReport(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AuthenticationFailureReport_set, hf_index, ett_ansi_map_AuthenticationFailureReport); + + return offset; +} + + +static const ber_sequence_t AuthenticationFailureReportRes_set[] = { + { BER_CLASS_CON, 77, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authenticationAlgorithmVersion_impl }, + { BER_CLASS_CON, 37, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authenticationResponseUniqueChallenge_impl }, + { BER_CLASS_CON, 38, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callHistoryCount_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_denyAccess_impl }, + { BER_CLASS_CON, 87, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_destinationDigits_impl }, + { BER_CLASS_CON, 42, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariableSSD_impl }, + { BER_CLASS_CON, 43, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariableUniqueChallenge_impl }, + { BER_CLASS_CON, 46, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sharedSecretData_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 52, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ssdnotShared_impl }, + { BER_CLASS_CON, 47, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminalType_impl }, + { BER_CLASS_CON, 51, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_updateCount_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - ".... ...%u : NAMPS 800 MHz channel %sacceptable", - value & 0x01, (value & 0x01) ? "" : "not "); +static int +dissect_ansi_map_AuthenticationFailureReportRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AuthenticationFailureReportRes_set, hf_index, ett_ansi_map_AuthenticationFailureReportRes); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; } -static void -param_mob_rev(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_AuthenticationData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_authenticationData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AuthenticationData(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_authenticationData); +} + - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Revision %u", - value); - EXTRANEOUS_DATA_CHECK(len, 1); +static int +dissect_ansi_map_AuthenticationResponse(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_authenticationResponse_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AuthenticationResponse(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_authenticationResponse); } -static void -param_cdma_band_class(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value, temp_int; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_CDMANetworkIdentification(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_cdmaNetworkIdentification_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMANetworkIdentification(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaNetworkIdentification); +} - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - temp_int = value & 0x1f; - if ((temp_int < 0) || (temp_int >= (gint) NUM_BAND_CLASS_STR)) - { - str = "Reserved"; - } - else - { - str = band_class_str[temp_int]; - } - other_decode_bitfield_value(bigbuf, value, 0x1f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Band Class %s", - bigbuf, - str); +static int +dissect_ansi_map_ConfidentialityModes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 129 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_confidentialitymodes(parameter_tvb,pinfo,tree); + } + - EXTRANEOUS_DATA_CHECK(len, 1); + + return offset; +} +static int dissect_confidentialityModes_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ConfidentialityModes(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_confidentialityModes); } -static void -param_calling_party_name(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - SHORT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_ControlChannelMode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_controlChannelMode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ControlChannelMode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_controlChannelMode); +} - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Spec. has hardcoded as 0 0 1", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Availability, %s", - bigbuf, - (value & 0x10) ? "Name not available" : "Name available/unknown"); - other_decode_bitfield_value(bigbuf, value, 0x0c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +static int +dissect_ansi_map_Digits(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - switch (value & 0x03) - { - case 0: str = "Presentation allowed"; break; - case 1: str = "Presentation restricted"; break; - case 2: str = "Blocking toggle"; break; - case 3: str = "No indication"; break; - } + return offset; +} +static int dissect_digits_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_Digits(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_digits); +} +static int dissect_digits_Destination_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_Digits(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_digits_Destination); +} +static int dissect_digits_carrier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_Digits(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_digits_carrier); +} +static int dissect_digits_dest_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_Digits(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_digits_dest); +} +static int dissect_digits_Carrier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_Digits(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_digits_Carrier); +} - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Presentation Status, %s", - bigbuf, - str); - if (len == 1) return; - saved_offset = asn1->offset; +static int +dissect_ansi_map_PC_SSN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 249 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_pc_ssn(parameter_tvb,pinfo,tree); + } + - proto_tree_add_text(tree, asn1->tvb, - asn1->offset, len - 1, - "IA5 Digits"); - asn1->offset += (len - 1); + return offset; +} +static int dissect_pc_ssn_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PC_SSN(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_pc_ssn); +} +static int dissect_pC_SSN_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PC_SSN(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_pC_SSN); } -static void -param_red_party_name(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - SHORT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_RandomVariable(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_randomVariable_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RandomVariable(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_randomVariable); +} - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Spec. has hardcoded as 0 1 1", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Availability, %s", - bigbuf, - (value & 0x10) ? "Name not available" : "Name available/unknown"); - other_decode_bitfield_value(bigbuf, value, 0x0c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +static int +dissect_ansi_map_ServiceRedirectionCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - switch (value & 0x03) - { - case 0: str = "Presentation allowed"; break; - case 1: str = "Presentation restricted"; break; - case 2: str = "Blocking toggle"; break; - case 3: str = "No indication"; break; - } + return offset; +} +static int dissect_serviceRedirectionCause_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ServiceRedirectionCause(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_serviceRedirectionCause); +} - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Presentation Status, %s", - bigbuf, - str); - if (len == 1) return; +static const value_string ansi_map_SuspiciousAccess_vals[] = { + { 0, "not-used" }, + { 1, "anomalous-Digits" }, + { 2, "unspecified" }, + { 0, NULL } +}; - saved_offset = asn1->offset; - proto_tree_add_text(tree, asn1->tvb, - asn1->offset, len - 1, - "IA5 Digits"); +static int +dissect_ansi_map_SuspiciousAccess(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1->offset += (len - 1); + return offset; +} +static int dissect_suspiciousAccess_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SuspiciousAccess(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_suspiciousAccess); } -static void -param_srvc_id(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - proto_tree_add_text(tree, asn1->tvb, - asn1->offset, len, - "Service Identifier (Spec. does not define clearly)"); - asn1->offset += len; + +static int +dissect_ansi_map_TransactionCapability(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 302 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_transactioncapability(parameter_tvb,pinfo,tree); + } + + + + + return offset; +} +static int dissect_transactionCapability_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TransactionCapability(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_transactionCapability); } -static void -param_all_or_none(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); +static const ber_sequence_t AuthenticationRequest_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 34, BER_FLAGS_IMPLTAG, dissect_systemAccessType_impl }, + { BER_CLASS_CON, 49, BER_FLAGS_IMPLTAG, dissect_systemCapabilities_impl }, + { BER_CLASS_CON, 161, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authenticationData_impl }, + { BER_CLASS_CON, 35, BER_FLAGS_IMPLTAG, dissect_authenticationResponse_impl }, + { BER_CLASS_CON, 38, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callHistoryCount_impl }, + { BER_CLASS_CON, 232, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaNetworkIdentification_impl }, + { BER_CLASS_CON, 39, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_confidentialityModes_impl }, + { BER_CLASS_CON, 199, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_controlChannelMode_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 40, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariable_impl }, + { BER_CLASS_CON, 237, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceRedirectionCause_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 285, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_suspiciousAccess_impl }, + { BER_CLASS_CON, 47, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminalType_impl }, + { BER_CLASS_CON, 123, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_AuthenticationRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AuthenticationRequest_set, hf_index, ett_ansi_map_AuthenticationRequest); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "All changes must succeed or none should be applied"; break; - case 2: str = "Treat each change independently"; break; - default: - if ((value >= 3) && (value <= 223)) { str = "Reserved, treat as All changes must succeed or none should be applied"; } - else { str = "Reserved for protocol extension, treat as All changes must succeed or none should be applied"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); + +static int +dissect_ansi_map_AnalogRedirectInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_analogRedirectInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AnalogRedirectInfo(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_analogRedirectInfo); } -static void -param_change(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); +static const ber_sequence_t AnalogRedirectRecord_sequence[] = { + { BER_CLASS_CON, 224, BER_FLAGS_IMPLTAG, dissect_analogRedirectInfo_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_AnalogRedirectRecord(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + AnalogRedirectRecord_sequence, hf_index, ett_ansi_map_AnalogRedirectRecord); + + return offset; +} +static int dissect_analogRedirectRecord_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AnalogRedirectRecord(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_analogRedirectRecord); +} - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Set Data Item to Default Value"; break; - case 2: str = "Add Data Item"; break; - case 3: str = "Delete Data Item"; break; - case 4: str = "Replace Data Item with associated DataValue"; break; - default: - if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as Set Data Item to Default Value"; } - else { str = "Reserved for protocol extension, treat as Set Data Item to Default Value"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static int +dissect_ansi_map_CDMABandClass(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_cdmaBandClass_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMABandClass(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaBandClass); } -static void -param_data_result(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_CDMAChannelNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_cdmaChannelNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAChannelNumber(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaChannelNumber); +} +static int dissect_cdmaChannelNumber2_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAChannelNumber(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaChannelNumber2); +} - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Successful"; break; - case 2: str = "Unsuccessful, unspecified"; break; - case 3: str = "Unsuccessful, no default value available"; break; - default: - if ((value >= 4) && (value <= 95)) { str = "Reserved, treat as Unsuccessful"; } - else if ((value >= 96) && (value <= 127)) { str = "Reserved for protocol extension, treat as Unsuccessful"; } - else if ((value >= 128) && (value <= 223)) { str = "Reserved, treat as Successful"; } - else { str = "Reserved for protocol extension, treat as Successful"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static const ber_sequence_t CDMAChannelNumberList_item_sequence[] = { + { BER_CLASS_CON, 226, BER_FLAGS_IMPLTAG, dissect_cdmaChannelNumber_impl }, + { BER_CLASS_CON, 226, BER_FLAGS_IMPLTAG, dissect_cdmaChannelNumber2_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_CDMAChannelNumberList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + CDMAChannelNumberList_item_sequence, hf_index, ett_ansi_map_CDMAChannelNumberList_item); + + return offset; +} +static int dissect_CDMAChannelNumberList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAChannelNumberList_item(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_CDMAChannelNumberList_item); } -static void -param_fail_cause(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - guint saved_offset; - SHORT_DATA_CHECK(len, 2); +static const ber_sequence_t CDMAChannelNumberList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_CDMAChannelNumberList_item }, +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_CDMAChannelNumberList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + CDMAChannelNumberList_sequence_of, hf_index, ett_ansi_map_CDMAChannelNumberList); + + return offset; +} +static int dissect_cdmaChannelNumberList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAChannelNumberList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaChannelNumberList); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len, - "ISUP Cause Indicator"); - asn1->offset += len; +static const ber_sequence_t CDMARedirectRecord_sequence[] = { + { BER_CLASS_CON, 170, BER_FLAGS_IMPLTAG, dissect_cdmaBandClass_impl }, + { BER_CLASS_CON, 227, BER_FLAGS_IMPLTAG, dissect_cdmaChannelNumberList_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 232, BER_FLAGS_IMPLTAG, dissect_cdmaNetworkIdentification_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_CDMARedirectRecord(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + CDMARedirectRecord_sequence, hf_index, ett_ansi_map_CDMARedirectRecord); + + return offset; +} +static int dissect_cdmaRedirectRecord_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMARedirectRecord(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaRedirectRecord); } -static void -param_fail_type(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_DataKey(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_dataKey_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DataKey(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_dataKey); +} - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Call abandoned"; break; - case 2: str = "Resource disconnect"; break; - case 3: str = "Failure at MSC"; break; - case 4: str = "SSFT expiration"; break; - default: - if ((value >= 5) && (value <= 223)) { str = "Reserved, ignore"; } - else { str = "Reserved for protocol extension, ignore"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static int +dissect_ansi_map_RoamingIndication(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_roamingIndication_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RoamingIndication(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_roamingIndication); } -static void -param_resume_pic(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_ServiceRedirectionInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_serviceRedirectionInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ServiceRedirectionInfo(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_serviceRedirectionInfo); +} - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Continue Call Processing"; break; - case 2: str = "Collect Information PIC"; break; - case 3: str = "Analyze Information PIC"; break; - case 4: str = "Select Route PIC"; break; - case 5: str = "Authorize Origination_Attempt PIC"; break; - case 6: str = "Authorize Call Setup PIC"; break; - case 7: str = "Send Call PIC"; break; - case 8: str = "O Alerting PIC"; break; - case 9: str = "O Active PIC"; break; - case 10: str = "O Suspended PIC"; break; - case 11: str = "O Null PIC"; break; - case 32: str = "Select Facility PIC"; break; - case 33: str = "Present Call PIC"; break; - case 34: str = "Authorize Termination Attempt PIC"; break; - case 35: str = "T Alerting PIC"; break; - case 36: str = "T Active PIC"; break; - case 37: str = "T Suspended PIC"; break; - case 38: str = "T Null PIC"; break; - default: - if ((value >= 12) && (value <= 31)) { str = "Reserved, treat as Not used"; } - else if ((value >= 39) && (value <= 223)) { str = "Reserved, ignore"; } - else { str = "Reserved for protocol extension, ignore"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Point in Call, %s (%u)", - str, - value); + +static int +dissect_ansi_map_VoicePrivacyMask(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_voicePrivacyMask_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_VoicePrivacyMask(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_voicePrivacyMask); +} + + +static const ber_sequence_t AuthenticationRequestRes_set[] = { + { BER_CLASS_CON, 225, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_analogRedirectRecord_impl }, + { BER_CLASS_CON, 77, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authenticationAlgorithmVersion_impl }, + { BER_CLASS_CON, 37, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authenticationResponseUniqueChallenge_impl }, + { BER_CLASS_CON, 38, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callHistoryCount_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 67, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaPrivateLongCodeMask_impl }, + { BER_CLASS_CON, 229, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaRedirectRecord_impl }, + { BER_CLASS_CON, 215, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataKey_impl }, + { BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_denyAccess_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 239, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_roamingIndication_impl }, + { BER_CLASS_CON, 238, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceRedirectionInfo_impl }, + { BER_CLASS_CON, 87, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_destinationDigits_impl }, + { BER_CLASS_CON, 42, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariableSSD_impl }, + { BER_CLASS_CON, 43, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariableUniqueChallenge_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 46, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sharedSecretData_impl }, + { BER_CLASS_CON, 45, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_signalingMessageEncryptionKey_impl }, + { BER_CLASS_CON, 52, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ssdnotShared_impl }, + { BER_CLASS_CON, 51, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_updateCount_impl }, + { BER_CLASS_CON, 48, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voicePrivacyMask_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_AuthenticationRequestRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AuthenticationRequestRes_set, hf_index, ett_ansi_map_AuthenticationRequestRes); + + return offset; } -static void -param_special_rsc(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value, i; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - i = 0; +static int +dissect_ansi_map_ReauthenticationReport(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - do - { - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_reauthenticationReport_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ReauthenticationReport(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_reauthenticationReport); +} - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "DTMF tone detector"; break; - case 2: str = "Automatic Speech Recognition - Speaker Independent - Digits"; break; - case 3: str = "Automatic Speech Recognition - Speaker Independent - Speech User Interface Version 1"; break; - default: - if ((value >= 4) && (value <= 223)) { str = "Reserved, treat as Not used"; } - else { str = "Reserved for protocol extension, treat as Not used"; } - break; + + +static int +dissect_ansi_map_ServiceIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 345 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + guint8 ServiceIndicator; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + if (SMS_BearerData_tvb !=NULL) + { + ServiceIndicator = tvb_get_guint8(parameter_tvb,0); + switch(ServiceIndicator){ + case 1: /* CDMA OTASP Service */ + case 3: /* CDMA OTAPA Service */ + dissector_try_port(is683_dissector_table, ansi_map_is_invoke ? 0 : 1, SMS_BearerData_tvb, g_pinfo, g_tree); + break; + case 4: /* CDMA Position Determination Service */ + dissector_try_port(is801_dissector_table, ansi_map_is_invoke ? 0 : 1, SMS_BearerData_tvb, g_pinfo, g_tree); + break; + default: + break; + } + } } + - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "[%u] Resource Type, %s", - i++, - str); - saved_offset = asn1->offset; - } - while ((len - i) > 0); + return offset; +} +static int dissect_serviceIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ServiceIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_serviceIndicator); } -static void -param_time_date_offset(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - EXACT_DATA_CHECK(len, 2); - saved_offset = asn1->offset; +static int +dissect_ansi_map_SignalingMessageEncryptionReport(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_signalingMessageEncryptionReport_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SignalingMessageEncryptionReport(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_signalingMessageEncryptionReport); +} + - asn1_int32_value_decode(asn1, 2, &value); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "In minutes (%u)", - value); +static int +dissect_ansi_map_SSDUpdateReport(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_ssdUpdateReport_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SSDUpdateReport(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_ssdUpdateReport); } -static void -param_network_tmsi(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value, addr_type, first_dig; - guint saved_offset; - const gchar *str = NULL; - guchar *poctets; - SHORT_DATA_CHECK(len, 4); - saved_offset = asn1->offset; +static int +dissect_ansi_map_VoicePrivacyReport(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_voicePrivacyReport_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_VoicePrivacyReport(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_voicePrivacyReport); +} + + +static const ber_sequence_t AuthenticationStatusReport_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 49, BER_FLAGS_IMPLTAG, dissect_systemCapabilities_impl }, + { BER_CLASS_CON, 138, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_countUpdateReport_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 192, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reauthenticationReport_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 193, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceIndicator_impl }, + { BER_CLASS_CON, 194, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_signalingMessageEncryptionReport_impl }, + { BER_CLASS_CON, 156, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ssdUpdateReport_impl }, + { BER_CLASS_CON, 124, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uniqueChallengeReport_impl }, + { BER_CLASS_CON, 196, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voicePrivacyReport_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 4, &value); +static int +dissect_ansi_map_AuthenticationStatusReport(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AuthenticationStatusReport_set, hf_index, ett_ansi_map_AuthenticationStatusReport); + + return offset; +} + + +static const ber_sequence_t AuthenticationStatusReportRes_set[] = { + { BER_CLASS_CON, 77, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authenticationAlgorithmVersion_impl }, + { BER_CLASS_CON, 37, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authenticationResponseUniqueChallenge_impl }, + { BER_CLASS_CON, 38, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callHistoryCount_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_denyAccess_impl }, + { BER_CLASS_CON, 87, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_destinationDigits_impl }, + { BER_CLASS_CON, 42, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariableSSD_impl }, + { BER_CLASS_CON, 43, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariableUniqueChallenge_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 46, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sharedSecretData_impl }, + { BER_CLASS_CON, 52, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ssdnotShared_impl }, + { BER_CLASS_CON, 51, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_updateCount_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "TMSI Code, %u", - value); +static int +dissect_ansi_map_AuthenticationStatusReportRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AuthenticationStatusReportRes_set, hf_index, ett_ansi_map_AuthenticationStatusReportRes); - if (len == 4) return; + return offset; +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - first_dig = Dgt_tbcd.out[(value & 0xf0) >> 4]; +static int +dissect_ansi_map_RandomVariableBaseStation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : First digit of TMSI Zone, %c", - bigbuf, - first_dig); + return offset; +} +static int dissect_randomVariableBaseStation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RandomVariableBaseStation(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_randomVariableBaseStation); +} - addr_type = value & 0x0f; - switch (addr_type) - { - case 0: str = "Not used"; break; - case 1: str = "E.212 based routing"; break; - case 2: str = "20-bit TDMA TMSI"; break; - case 3: str = "24-bit TDMA TMSI"; break; - default: - str = "Reserved for protocol extension, treat as Not used"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x0f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Type of addressing, %s", - bigbuf, - str); +static const ber_sequence_t BaseStationChallenge_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 41, BER_FLAGS_IMPLTAG, dissect_randomVariableBaseStation_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 193, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceIndicator_impl }, + { 0, 0, 0, NULL } +}; - if (len == 5) return; +static int +dissect_ansi_map_BaseStationChallenge(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + BaseStationChallenge_set, hf_index, ett_ansi_map_BaseStationChallenge); - saved_offset = asn1->offset; + return offset; +} - asn1_string_value_decode(asn1, (len-5), &poctets); - bigbuf[0] = first_dig; - my_dgt_tbcd_unpack(bigbuf+1, poctets, (len-5), &Dgt_tbcd); - g_free(poctets); +static int +dissect_ansi_map_AuthenticationResponseBaseStation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - proto_tree_add_text(tree, asn1->tvb, - saved_offset - 1, (len-5)+1, - "TMSI Zone, %s", - bigbuf); + return offset; +} +static int dissect_authenticationResponseBaseStation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AuthenticationResponseBaseStation(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_authenticationResponseBaseStation); } -static void -param_reqd_param_mask(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Location Area ID (LOCID) %srequired", - bigbuf, - (value & 0x10) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : TMSI %srequired", - bigbuf, - (value & 0x08) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : ESN %srequired", - bigbuf, - (value & 0x04) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : MIN %srequired", - bigbuf, - (value & 0x02) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : IMSI %srequired", - bigbuf, - (value & 0x01) ? "" : "not "); - - EXTRANEOUS_DATA_CHECK(len, 1); + +static const ber_sequence_t BaseStationChallengeRes_set[] = { + { BER_CLASS_CON, 36, BER_FLAGS_IMPLTAG, dissect_authenticationResponseBaseStation_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_BaseStationChallengeRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + BaseStationChallengeRes_set, hf_index, ett_ansi_map_BaseStationChallengeRes); + + return offset; } -static void -param_srvc_red_cause(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; +static const ber_sequence_t Blocking_set[] = { + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_Blocking(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + Blocking_set, hf_index, ett_ansi_map_Blocking); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Normal Registration"; break; - case 2: str = "System Not Found"; break; - case 3: str = "Protocol Mismatch"; break; - case 4: str = "Registration Rejection"; break; - case 5: str = "Wrong SID"; break; - case 6: str = "Wrong NID"; break; - default: - if ((value >= 7) && (value <= 223)) { str = "Reserved, treat as Normal Registration"; } - else { str = "Reserved for protocol extension. If unknown, treat as Normal Registration"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static const ber_sequence_t BulkDeregistration_set[] = { + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_BulkDeregistration(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + BulkDeregistration_set, hf_index, ett_ansi_map_BulkDeregistration); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; } -static void -param_srvc_red_info(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - saved_offset = asn1->offset; +static const ber_sequence_t CountRequest_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_CountRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + CountRequest_set, hf_index, ett_ansi_map_CountRequest); - other_decode_bitfield_value(bigbuf, value, 0xfc, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); + return offset; +} - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : NDSS Status (NDS), %ssuppressed", - bigbuf, - (value & 0x02) ? "" : "not "); - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Return If Fail (RIF), If MS fails to access the redirected system, MS shall %sreturn to the serving system", - bigbuf, - (value & 0x01) ? "" : "not "); +static const ber_sequence_t CountRequestRes_set[] = { + { BER_CLASS_CON, 38, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callHistoryCount_impl }, + { 0, 0, 0, NULL } +}; - EXTRANEOUS_DATA_CHECK(len, 1); +static int +dissect_ansi_map_CountRequestRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + CountRequestRes_set, hf_index, ett_ansi_map_CountRequestRes); + + return offset; } -static void -param_roaming_ind(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_BillingID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 91 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_billingid(parameter_tvb,pinfo,tree); + } - switch (value) - { - case 0: str = "Roaming Indicator On"; break; - case 1: str = "Roaming Indicator Off"; break; - case 2: str = "Roaming Indicator Flashing"; break; - case 3: str = "Out of Neighborhood"; break; - case 4: str = "Out of Building"; break; - case 5: str = "Roaming - Preferred System"; break; - case 6: str = "Roaming - Available System"; break; - case 7: str = "Roaming - Alliance Partner"; break; - case 8: str = "Roaming - Premium Partner"; break; - case 9: str = "Roaming - Full Service Functionality"; break; - case 10: str = "Roaming - Partial Service Functionality"; break; - case 11: str = "Roaming Banner On"; break; - case 12: str = "Roaming Banner Off"; break; - default: - if ((value >= 13) && (value <= 63)) { str = "Reserved for Standard Enhanced Roaming Indicator Numbers"; } - else if ((value >= 64) && (value <= 127)) { str = "Reserved for Non-Standard Enhanced Roaming Indicator Numbers"; } - else { str = "Reserved"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_billingID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_BillingID(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_billingID); } -static void -param_cdma_pci(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_ChannelData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 121 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_channeldata(parameter_tvb,pinfo,tree); + } - asn1_int32_value_decode(asn1, 1, &value); - other_decode_bitfield_value(bigbuf, value, 0xfe, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : CDMA PWR_COMB_IND", - bigbuf); + return offset; +} +static int dissect_channelData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ChannelData(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_channelData); } -static void -param_cdma_chan_num(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - SHORT_DATA_CHECK(len, 2); - saved_offset = asn1->offset; +static int +dissect_ansi_map_InterSwitchCount(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 2, &value); + return offset; +} +static int dissect_interSwitchCount_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_InterSwitchCount(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_interSwitchCount); +} - other_decode_bitfield_value(bigbuf, value >> 8, 0xf8, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 1, - "%s : Reserved", - bigbuf); - other_decode_bitfield_value(bigbuf, value >> 8, 0x07, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 1, - "%s : CDMA Channel Number (MSB) %u", - bigbuf, - value & 0x07ff); - other_decode_bitfield_value(bigbuf, value & 0x00ff, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset+1, 1, - "%s : CDMA Channel Number (LSB)", - bigbuf); +static int +dissect_ansi_map_ServingCellID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - EXTRANEOUS_DATA_CHECK(len, 2); + return offset; +} +static int dissect_servingCellID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ServingCellID(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_servingCellID); } -static void -param_cdma_sci(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_StationClassMark(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_stationClassMark_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_StationClassMark(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_stationClassMark); +} - other_decode_bitfield_value(bigbuf, value, 0xf8, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x07, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Slot Cycle Index, %u", - bigbuf, - (value & 0x07)); -} -static void -param_vp_report(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +static int +dissect_ansi_map_TargetCellID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - EXACT_DATA_CHECK(len, 1); + return offset; +} +static int dissect_targetCellID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TargetCellID(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_targetCellID); +} +static int dissect_targetCellID1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TargetCellID(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_targetCellID1); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static const value_string ansi_map_HandoffReason_vals[] = { + { 0, "not-used" }, + { 1, "unspecified" }, + { 2, "successful" }, + { 3, "weak-Signal" }, + { 4, "off-loading" }, + { 5, "anticipatory" }, + { 0, NULL } +}; - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Voice Privacy not attempted"; break; - case 2: str = "Voice Privacy no response"; break; - case 3: str = "Voiec Privacy successful is active"; break; - case 4: str = "Voice Privacy failed"; break; - default: - if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as Voice Privacy not attempted"; } - else { str = "Reserved for protocol extension, treat as Voice Privacy not attempted"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s (%u)", - str, - value); +static int +dissect_ansi_map_HandoffReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_handoffReason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_HandoffReason(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_handoffReason); } -static void -param_cdma_scm(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Dual-mode Indicator, %s", - bigbuf, - (value & 0x40) ? "Dual mode CDMA" : "CDMA only"); - - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Slotted mode Indicator, %s", - bigbuf, - (value & 0x20) ? "slotted capable" : "slotted incapable"); - - other_decode_bitfield_value(bigbuf, value, 0x18, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Analog Transmission, %s", - bigbuf, - (value & 0x04) ? "discontinuous" : "continuous"); - - switch (value & 0x03) - { - case 0: str = "Power Class I"; break; - case 1: str = "Power Class II"; break; - case 2: str = "Power Class III"; break; - case 3: str = "Reserved"; break; - } - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, - str); - EXTRANEOUS_DATA_CHECK(len, 1); +static int +dissect_ansi_map_HandoffState(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 160 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_handoffstate(parameter_tvb,pinfo,tree); + } + + + + return offset; +} +static int dissect_handoffState_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_HandoffState(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_handoffState); } -static void -param_ota_result_code(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_TDMABurstIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_tdmaBurstIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TDMABurstIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_tdmaBurstIndicator); +} - switch (value) - { - case 0: str = "Accepted - Successful"; break; - case 1: str = "Rejected - Unknown cause"; break; - case 2: str = "Computation Failure - E.g., unable to compute A-key"; break; - case 3: str = "CSC Rejected - CSC challenge failure"; break; - case 4: str = "Unrecognized OTASPCallEntry"; break; - case 5: str = "Unsupported AKeyProtocolVersion(s)"; break; - case 6: str = "Unable to Commit"; break; - default: - if ((value >= 7) && (value <= 223)) { str = "Reserved, treat as Rejected - Unknown cause"; } - else { str = "Reserved for protocol extension, treat as Rejected - Unknown cause"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s (%u)", - str, - value); - EXTRANEOUS_DATA_CHECK(len, 1); +static int +dissect_ansi_map_TDMACallMode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_tdmaCallMode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TDMACallMode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_tdmaCallMode); } -static void -param_cdma_scm2(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_TDMAChannelData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_tdmaChannelData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TDMAChannelData(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_tdmaChannelData); +} + + +static const ber_sequence_t FacilitiesDirective_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_channelData_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_interSwitchCount_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 18, BER_FLAGS_IMPLTAG, dissect_stationClassMark_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_targetCellID_impl }, + { BER_CLASS_CON, 39, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_confidentialityModes_impl }, + { BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_handoffReason_impl }, + { BER_CLASS_CON, 164, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_handoffState_impl }, + { BER_CLASS_CON, 45, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_signalingMessageEncryptionKey_impl }, + { BER_CLASS_CON, 31, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBurstIndicator_impl }, + { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaCallMode_impl }, + { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaChannelData_impl }, + { BER_CLASS_CON, 48, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voicePrivacyMask_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Value %u", - value); +static int +dissect_ansi_map_FacilitiesDirective(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + FacilitiesDirective_set, hf_index, ett_ansi_map_FacilitiesDirective); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; } -static void -param_tdma_term_cap(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - - SHORT_DATA_CHECK(len, 4); - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 1800 MHz F channel %sacceptable", - bigbuf, - (value & 0x40) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 1800 MHz E channel %sacceptable", - bigbuf, - (value & 0x20) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 1800 MHz D channel %sacceptable", - bigbuf, - (value & 0x10) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 1800 MHz C channel %sacceptable", - bigbuf, - (value & 0x08) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 1800 MHz B channel %sacceptable", - bigbuf, - (value & 0x04) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s acceptable", - bigbuf, - (value & 0x02) ? "1800 MHz A channel" : "1800 MHz A&B Digital channel not"); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 800 MHz A&B channel %sacceptable", - bigbuf, - (value & 0x01) ? "" : "not "); - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xfc, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : IS-641 Voice Coder %sacceptable", - bigbuf, - (value & 0x02) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : VSELP Voice Coder %sacceptable", - bigbuf, - (value & 0x01) ? "" : "not "); - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - switch (value) - { - case 0: str = "EIA-553 or IS-54-A"; break; - case 1: str = "TIA/EIA-627 (IS-54-B)"; break; - case 2: str = "IS-136"; break; - case 3: str = "Reserved (ANSI J-STD-011)"; break; - case 4: str = "PV 0 as published in TIA/EIA-136-0 and IS-136-A"; break; - case 5: str = "PV 1 as published in TIA/EIA-136-A"; break; - case 6: str = "PV 2 as published in TIA/EIA-136-A"; break; - case 7: str = "PV 3 as published in TIA/EIA-136-A"; break; - default: - str = "Reserved, treat as EIA-553 or IS-54-A"; - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 1, - "Protocol Version, %s", - str); - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Triple Rate (3RATE) %ssupported", - bigbuf, - (value & 0x80) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Double Rate (2RATE) %ssupported", - bigbuf, - (value & 0x40) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Full Rate (FRATE) %ssupported", - bigbuf, - (value & 0x20) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Half Rate (HRATE) %ssupported", - bigbuf, - (value & 0x10) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Analog Voice (AVOX) %ssupported", - bigbuf, - (value & 0x08) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Secure Telephone Unit III (STU3) %ssupported", - bigbuf, - (value & 0x04) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Group 3 Fax (G3FAX) %ssupported", - bigbuf, - (value & 0x02) ? "" : "not "); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Asynchronous Data (ADS) %ssupported", - bigbuf, - (value & 0x01) ? "" : "not "); - - EXTRANEOUS_DATA_CHECK(len, 4); +static const ber_sequence_t FacilitiesDirectiveRes_set[] = { + { BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_channelData_impl }, + { BER_CLASS_CON, 39, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_confidentialityModes_impl }, + { BER_CLASS_CON, 31, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBurstIndicator_impl }, + { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaChannelData_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_FacilitiesDirectiveRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + FacilitiesDirectiveRes_set, hf_index, ett_ansi_map_FacilitiesDirectiveRes); + + return offset; } -static void -param_tdma_voice_coder(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value, vc; - guint orig_offset, saved_offset; - const gchar *str = NULL; - SHORT_DATA_CHECK(len, 2); - orig_offset = asn1->offset; - saved_offset = asn1->offset; +static int +dissect_ansi_map_BaseStationManufacturerCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - do - { - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_baseStationManufacturerCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_BaseStationManufacturerCode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_baseStationManufacturerCode); +} - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - vc = (value & 0x0f); - switch (vc) - { - case 0: str = "Not used"; break; - case 1: str = "VSELP Voice Coder acceptable"; break; - case 2: str = "IS-641 Voice Coder acceptable"; break; - case 6: str = "Reserved for SOC/BSMC Specific signaling. If unknown, use any acceptable value"; break; - default: - if ((vc >= 3) && (vc <= 5)) { str = "Reserved. Ignore on reception, use any acceptable value"; } - else if ((vc >= 7) && (vc <= 12)) { str = "Reserved. Ignore on reception, use any acceptable value"; } - else if ((vc >= 13) && (vc <= 15)) { str = "Reserved for protocol extension. If unknown, use any acceptable value"; } - break; + +static int +dissect_ansi_map_AlertCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 66 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_alertcode(parameter_tvb,pinfo,tree); } - other_decode_bitfield_value(bigbuf, value, 0x0f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Voice Coder, %s", - bigbuf, - str); - saved_offset = asn1->offset; - } - while ((len - (saved_offset - orig_offset)) > 0); + + return offset; +} +static int dissect_alertCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AlertCode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_alertCode); } -static void -param_cdma_pilot_pn(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - SHORT_DATA_CHECK(len, 2); - saved_offset = asn1->offset; +static int +dissect_ansi_map_CDMA2000HandoffInvokeIOSData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_cdma2000HandoffInvokeIOSData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMA2000HandoffInvokeIOSData(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdma2000HandoffInvokeIOSData); +} - asn1_int32_value_decode(asn1, 2, &value); - other_decode_bitfield_value(bigbuf, value >> 8, 0xfe, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 1, - "%s : Reserved", - bigbuf); - other_decode_bitfield_value(bigbuf, value >> 8, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 1, - "%s : Pilot PN (MSB), %u", - bigbuf, value & 0x01ff); +static int +dissect_ansi_map_CDMACallMode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 106 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_cdmacallmode(parameter_tvb,pinfo,tree); + } - other_decode_bitfield_value(bigbuf, value & 0x00ff, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset + 1, 1, - "%s : Pilot PN (LSB)", - bigbuf); - EXTRANEOUS_DATA_CHECK(len, 2); + return offset; +} +static int dissect_cdmaCallMode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMACallMode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaCallMode); } -static void -param_cdma_pilot_strength(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_CDMAChannelData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_cdmaChannelData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAChannelData(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaChannelData); +} - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x3f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Value %u", - bigbuf, - value & 0x3f); -} -static void -param_trunk_stat(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +static int +dissect_ansi_map_CDMAConnectionReference(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - EXACT_DATA_CHECK(len, 1); + return offset; +} +static int dissect_cdmaConnectionReference_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAConnectionReference(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaConnectionReference); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Idle"; break; - case 1: str = "Blocked"; break; - default: - if ((value >= 2) && (value <= 223)) { str = "Reserved, treat as ERROR or Blocked"; } - else { str = "Reserved for protocol extension, treat as ERROR or Blocked"; } - break; - } +static int +dissect_ansi_map_CDMAServiceOption(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Trunk Status, %s", - str); + return offset; +} +static int dissect_cdmaServiceOption_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAServiceOption(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaServiceOption); +} +static int dissect_cdmaServiceOption2_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAServiceOption(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaServiceOption2); } -static void -param_pref_lang_ind(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_CDMAState(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - switch (value) - { - case 0: str = "Unspecified"; break; - case 1: str = "English"; break; - case 2: str = "French"; break; - case 3: str = "Spanish"; break; - case 4: str = "German"; break; - case 5: str = "Portuguese"; break; - default: - str = "Reserved, treat as Unspecified"; - break; - } + return offset; +} +static int dissect_cdmaState_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAState(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaState); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Preferred Language, %s", - str); - EXTRANEOUS_DATA_CHECK(len, 1); -} -static void -param_rand_valtime(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - char *buf; +static int +dissect_ansi_map_DataPrivacyParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - saved_offset = asn1->offset; + return offset; +} +static int dissect_dataPrivacyParameters_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DataPrivacyParameters(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_dataPrivacyParameters); +} - asn1_int32_value_decode(asn1, 1, &value); - if (value == 0) - { - str = "RAND shall not be stored"; - } - else - { - buf=ep_alloc(64); - g_snprintf(buf, 64, "RAND may be used for %u minutes", value); - str = buf; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static int +dissect_ansi_map_CDMAServiceOptionConnectionIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_cdmaServiceOptionConnectionIdentifier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAServiceOptionConnectionIdentifier(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaServiceOptionConnectionIdentifier); } -static void -param_tdma_burst_ind(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); +static const ber_sequence_t CDMAConnectionReferenceInformation_sequence[] = { + { BER_CLASS_CON, 208, BER_FLAGS_IMPLTAG, dissect_cdmaConnectionReference_impl }, + { BER_CLASS_CON, 175, BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption_impl }, + { BER_CLASS_CON, 213, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaState_impl }, + { BER_CLASS_CON, 216, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataPrivacyParameters_impl }, + { BER_CLASS_CON, 361, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOptionConnectionIdentifier_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_CDMAConnectionReferenceInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + CDMAConnectionReferenceInformation_sequence, hf_index, ett_ansi_map_CDMAConnectionReferenceInformation); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_cdmaConnectionReferenceInformation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAConnectionReferenceInformation(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaConnectionReferenceInformation); +} +static int dissect_cdmaConnectionReferenceInformation2_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAConnectionReferenceInformation(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaConnectionReferenceInformation2); +} - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x7c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Time Alignment Offset (TA), %u", - bigbuf, - (value & 0x7c) >> 2); +static const ber_sequence_t CDMAConnectionReferenceList_item_sequence[] = { + { BER_CLASS_CON, 211, BER_FLAGS_IMPLTAG, dissect_cdmaConnectionReferenceInformation_impl }, + { BER_CLASS_CON, 211, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaConnectionReferenceInformation2_impl }, + { 0, 0, 0, NULL } +}; - switch (value & 0x03) - { - case 0: str = "Transmit normal burst after cell-to-cell handoff"; break; - case 1: str = "Transmit normal burst after handoff within cell"; break; - case 2: str = "Transmit shortened burst after cell-to-cell handoff"; break; - case 3: str = "Reserved, treat with RETURN ERROR"; break; - } +static int +dissect_ansi_map_CDMAConnectionReferenceList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + CDMAConnectionReferenceList_item_sequence, hf_index, ett_ansi_map_CDMAConnectionReferenceList_item); - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Burst Code, %s", - bigbuf, - str); + return offset; +} +static int dissect_CDMAConnectionReferenceList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAConnectionReferenceList_item(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_CDMAConnectionReferenceList_item); } -static void -param_orig_ind(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); +static const ber_sequence_t CDMAConnectionReferenceList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_CDMAConnectionReferenceList_item }, +}; + +static int +dissect_ansi_map_CDMAConnectionReferenceList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + CDMAConnectionReferenceList_sequence_of, hf_index, ett_ansi_map_CDMAConnectionReferenceList); + + return offset; +} +static int dissect_cdmaConnectionReferenceList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAConnectionReferenceList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaConnectionReferenceList); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Prior agreement"; break; - case 2: str = "Origination denied"; break; - case 3: str = "Local calls only"; break; - case 4: str = "Selected leading digits of directory number or of international E.164 number, see Digits(Destination)"; break; - case 5: str = "Selected leading digits of directory number or of international E.164 number and local calls only, see Digits(Destination)"; break; - case 6: str = "National long distance"; break; - case 7: str = "International calls"; break; - case 8: str = "Single directory number or international E.164 number, see Digits(Destination)"; break; - default: - if ((value >= 9) && (value <= 223)) { str = "Reserved, treat as Local calls only"; } - else { str = "Reserved for protocol extension, treat as Local calls only"; } - break; - } +static int +dissect_ansi_map_CDMAMobileProtocolRevision(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Allowed Call Types, %s", - str); + return offset; +} +static int dissect_cdmaMobileProtocolRevision_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAMobileProtocolRevision(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaMobileProtocolRevision); } -static void -param_ms_loc(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - SHORT_DATA_CHECK(len, 7); - saved_offset = asn1->offset; +static int +dissect_ansi_map_CDMAMSMeasuredChannelIdentity(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 3, &value); + return offset; +} +static int dissect_cdmaMSMeasuredChannelIdentity_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAMSMeasuredChannelIdentity(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaMSMeasuredChannelIdentity); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Latitude in tenths of a second, %u", - value); - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 3, &value); +static int +dissect_ansi_map_CDMAServiceConfigurationRecord(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Longitude in tenths of a second, %u", - value); + return offset; +} +static int dissect_cdmaServiceConfigurationRecord_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAServiceConfigurationRecord(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaServiceConfigurationRecord); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, MIN(len - 6, 2), &value); +static const ber_sequence_t CDMAServiceOptionList_item_sequence[] = { + { BER_CLASS_CON, 175, BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption_impl }, + { BER_CLASS_CON, 175, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption2_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Resolution in units of 1 foot, %u", - value); +static int +dissect_ansi_map_CDMAServiceOptionList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + CDMAServiceOptionList_item_sequence, hf_index, ett_ansi_map_CDMAServiceOptionList_item); - EXTRANEOUS_DATA_CHECK(len, 8); + return offset; +} +static int dissect_CDMAServiceOptionList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAServiceOptionList_item(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_CDMAServiceOptionList_item); } -static void -param_unique_chal_rep(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; +static const ber_sequence_t CDMAServiceOptionList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_CDMAServiceOptionList_item }, +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_CDMAServiceOptionList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + CDMAServiceOptionList_sequence_of, hf_index, ett_ansi_map_CDMAServiceOptionList); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Unique Challenge not attempted"; break; - case 2: str = "Unique Challenge no response"; break; - case 3: str = "Unique Challenge successful"; break; - case 4: str = "Unique Challenge failed"; break; - default: - if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as Unique Challenge not attempted"; } - else { str = "Reserved for protocol extension, treat as Unique Challenge not attempted"; } - break; - } + return offset; +} +static int dissect_cdmaServiceOptionList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAServiceOptionList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaServiceOptionList); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); - EXTRANEOUS_DATA_CHECK(len, 1); + +static int +dissect_ansi_map_CDMAServingOneWayDelay(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_cdmaServingOneWayDelay_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAServingOneWayDelay(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaServingOneWayDelay); } -static void -param_rand_unique(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - guint saved_offset; - EXACT_DATA_CHECK(len, 3); - saved_offset = asn1->offset; +static int +dissect_ansi_map_CDMAStationClassMark(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 113 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_cdmastationclassmark(parameter_tvb,pinfo,tree); + } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len, - "24-bit random number used as input to the CAVE algorithm for authenticating a specific MS"); - asn1->offset += len; + + return offset; +} +static int dissect_cdmaStationClassMark_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAStationClassMark(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaStationClassMark); } -static void -param_vpmask(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - EXACT_DATA_CHECK(len, 66); - saved_offset = asn1->offset; +static int +dissect_ansi_map_CDMAStationClassMark2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_cdmaStationClassMark2_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAStationClassMark2(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaStationClassMark2); +} - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x0f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Voice Privacy Mask-A (VPMASK-A) (MSB)", - bigbuf); - saved_offset = asn1->offset; +static int +dissect_ansi_map_CDMAPilotStrength(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 32, - "Voice Privacy Mask-A (VPMASK-A)"); + return offset; +} +static int dissect_cdmaPilotStrength_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAPilotStrength(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaPilotStrength); +} - asn1->offset += 32; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_CDMATargetOneWayDelay(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); + return offset; +} +static int dissect_cdmaTargetOneWayDelay_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMATargetOneWayDelay(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaTargetOneWayDelay); +} - other_decode_bitfield_value(bigbuf, value, 0x0f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Voice Privacy Mask-B (VPMASK-B) (MSB)", - bigbuf); - saved_offset = asn1->offset; +static const ber_sequence_t CDMATargetMAHOInformation_sequence[] = { + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_targetCellID_impl }, + { BER_CLASS_CON, 65, BER_FLAGS_IMPLTAG, dissect_cdmaPilotStrength_impl }, + { BER_CLASS_CON, 9999, BER_FLAGS_IMPLTAG, dissect_cdmaTargetOneWayDelay_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 32, - "Voice Privacy Mask-B (VPMASK-B)"); +static int +dissect_ansi_map_CDMATargetMAHOInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + CDMATargetMAHOInformation_sequence, hf_index, ett_ansi_map_CDMATargetMAHOInformation); - asn1->offset += 32; + return offset; +} +static int dissect_CDMATargetMAHOList_item_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMATargetMAHOInformation(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_CDMATargetMAHOList_item); } -static void -param_ssd(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - guint saved_offset; - EXACT_DATA_CHECK(len, 16); +static const ber_sequence_t CDMATargetMAHOList_sequence_of[1] = { + { BER_CLASS_CON, 9999, BER_FLAGS_IMPLTAG, dissect_CDMATargetMAHOList_item_impl }, +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_CDMATargetMAHOList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + CDMATargetMAHOList_sequence_of, hf_index, ett_ansi_map_CDMATargetMAHOList); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 8, - "Shared Secret Data-A (SSD-A)"); + return offset; +} +static int dissect_cdmaTargetMAHOList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMATargetMAHOList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaTargetMAHOList); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset+8, 8, - "Shared Secret Data-B (SSD-B)"); - asn1->offset += len; -} -static void -param_upd_count(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +static int +dissect_ansi_map_CDMASignalQuality(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - EXACT_DATA_CHECK(len, 1); + return offset; +} +static int dissect_cdmaSignalQuality_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMASignalQuality(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaSignalQuality); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static const ber_sequence_t CDMATargetMeasurementInformation_sequence[] = { + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_targetCellID_impl }, + { BER_CLASS_CON, 9999, BER_FLAGS_IMPLTAG, dissect_cdmaSignalQuality_impl }, + { BER_CLASS_CON, 61, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaTargetOneWayDelay_impl }, + { 0, 0, 0, NULL } +}; - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Update COUNT"; break; - default: - if ((value >= 2) && (value <= 223)) { str = "Reserved, treat as Update COUNT"; } - else { str = "Reserved for protocol extension, treat as Update COUNT"; } - break; - } +static int +dissect_ansi_map_CDMATargetMeasurementInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + CDMATargetMeasurementInformation_sequence, hf_index, ett_ansi_map_CDMATargetMeasurementInformation); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s", - str); + return offset; +} +static int dissect_CDMATargetMeasurementList_item_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMATargetMeasurementInformation(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_CDMATargetMeasurementList_item); } -static void -param_sme_key(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - guint saved_offset; - EXACT_DATA_CHECK(len, 8); +static const ber_sequence_t CDMATargetMeasurementList_sequence_of[1] = { + { BER_CLASS_CON, 133, BER_FLAGS_IMPLTAG, dissect_CDMATargetMeasurementList_item_impl }, +}; + +static int +dissect_ansi_map_CDMATargetMeasurementList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + CDMATargetMeasurementList_sequence_of, hf_index, ett_ansi_map_CDMATargetMeasurementList); + + return offset; +} +static int dissect_cdmaTargetMeasurementList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMATargetMeasurementList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaTargetMeasurementList); +} - saved_offset = asn1->offset; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len, - "Signaling Message Encryption Key (SMEKEY)"); - asn1->offset += len; +static int +dissect_ansi_map_ISLPInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_ilspInformation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ISLPInformation(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_ilspInformation); } -static void -param_rand_ssd(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - guint saved_offset; - EXACT_DATA_CHECK(len, 7); - saved_offset = asn1->offset; +static int +dissect_ansi_map_MSLocation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 201 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_mscid(parameter_tvb,pinfo,tree); + } + - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len, - "56-bit random number used as input to the CAVE algorithm for generating Shared Secret Data"); - asn1->offset += len; + return offset; +} +static int dissect_msLocation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_MSLocation(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_msLocation); } -static void -param_setup_result(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_NAMPSCallMode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 209 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_nampscallmode(parameter_tvb,pinfo,tree); + } - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Unsuccessful"; break; - case 2: str = "Successful"; break; - default: - str = "Reserved, treat as Unsuccessful"; - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_nampsCallMode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_NAMPSCallMode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_nampsCallMode); } -static void -param_randc(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - guint saved_offset; - saved_offset = asn1->offset; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 1, - "The 8 most significant bits of the 32-bit Random Variable used to compute the Authentication Response"); +static int +dissect_ansi_map_NAMPSChannelData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 217 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_nampschanneldata(parameter_tvb,pinfo,tree); + } + - asn1->offset += 1; - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_nampsChannelData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_NAMPSChannelData(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_nampsChannelData); } -static void -param_ext_mscid(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) -{ - gint32 type; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 4); - saved_offset = asn1->offset; +static int +dissect_ansi_map_NonPublicData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &type); + return offset; +} +static int dissect_nonPublicData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_NonPublicData(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_nonPublicData); +} - switch (type) - { - case 0: str = "Not specified"; break; - case 1: str = "Serving MSC"; break; - case 2: str = "Home MSC"; break; - case 3: str = "Gateway MSC"; break; - case 4: str = "HLR"; break; - case 5: str = "VLR"; break; - case 6: str = "EIR (reserved)"; break; - case 7: str = "AC"; break; - case 8: str = "Border MSC"; break; - case 9: str = "Originating MSC"; break; - default: - if ((type >= 10) && (type <= 223)) { str = "Reserved, treat as Not specified"; } - else { str = "Reserved for protocol extension, treat as Not specified"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Type (%u), %s", - type, - str); - param_mscid(asn1, tree, len-1, add_string, string_len); -} +static int +dissect_ansi_map_PDSNAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); -static void -param_sub_addr(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; + return offset; +} +static int dissect_pdsnAddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PDSNAddress(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_pdsnAddress); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Should be 1", - bigbuf); - switch ((value & 0x70) >> 4) - { - case 0x00: str = "NSAP (CCITT Rec. X.213 or ISO 8348 AD2)"; break; - case 0x02: str = "User specified"; break; - default: - str = "Reserved"; - break; - } +static int +dissect_ansi_map_PDSNProtocolType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0x70, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Type of Subaddress %s", - bigbuf, str); + return offset; +} +static int dissect_pdsnProtocolType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PDSNProtocolType(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_pdsnProtocolType); +} - switch ((value & 0x08) >> 3) - { - case 0x00: str = "Even number of subaddress signals follow"; break; - case 0x01: str = "Odd number of subaddress signals follow"; break; - } - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); - proto_tree_add_text(tree, asn1->tvb, - asn1->offset, len - 1, - "Subaddress"); +static int +dissect_ansi_map_QoSPriority(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1->offset += len - 1; + return offset; +} +static int dissect_qosPriority_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_QoSPriority(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_qosPriority); } -static void -param_digits_basic(ASN1_SCK *asn1, proto_tree *tree, guint len, gboolean searchable) -{ - gint32 value, b1, b2, b3, b4, enc, plan; - guint saved_offset; - const gchar *str = NULL; - proto_item *item; - proto_tree *subtree; - guchar *poctets; - SHORT_DATA_CHECK(len, 4); - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_SystemOperatorCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Dialed Numer or Called Party Number"; break; - case 2: str = "Calling Party Number"; break; - case 3: str = "Caller Interaction (Not used)"; break; - case 4: str = "Routing Number"; break; - case 5: str = "Billing Number"; break; - case 6: str = "Destination Number"; break; - case 7: str = "LATA (Not used)"; break; - case 8: str = "Carrier"; break; - case 13: str = "ESRD"; break; - default: - str = "Reserved"; - break; - } + return offset; +} +static int dissect_systemOperatorCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SystemOperatorCode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_systemOperatorCode); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Type of Digits %u: %s", - value, str); - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - item = - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Nature of Number"); +static int +dissect_ansi_map_TDMABandwidth(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - subtree = proto_item_add_subtree(item, ett_natnum); + return offset; +} +static int dissect_tdmaBandwidth_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TDMABandwidth(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_tdmaBandwidth); +} - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - switch ((value & 0x30) >> 4) - { - case 0x00: str = "User provided, not screened"; break; - case 0x01: str = "User provided, screening passed"; break; - case 0x02: str = "User provided, screening failed"; break; - case 0x03: str = "Network provided"; break; - } - other_decode_bitfield_value(bigbuf, value, 0x30, 8); - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); - - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - ".... %u... : Reserved", - (value & 0x08) >> 3); - - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - ".... .%u.. : Number is %savailable", - (value & 0x04) >> 2, (value & 0x04) ? "not " : ""); - - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - ".... ..%u. : Presentation %s", - (value & 0x02) >> 1, (value & 0x02) ? "Restricted" : "Allowed"); - - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - ".... ...%u : %s", - value & 0x01, (value & 0x01) ? "International" : "National"); - - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - - plan = (value & 0xf0) >> 4; - switch (plan) - { - case 0x00: str = "Unknown or not applicable"; break; - case 0x01: str = "ISDN Numbering (Not used)"; break; - case 0x02: str = "Telephony Numbering (ITU-T Rec. E.164, E.163)"; break; - case 0x03: str = "Data Numbering (ITU-T Rec. X.121)(Not used)"; break; - case 0x04: str = "Telex Numbering (ITU-T Rec. F.69)(Not used)"; break; - case 0x05: str = "Maritime Mobile Numbering (Not used)"; break; - case 0x06: str = "Land Mobile Numbering (ITU-T Rec. E.212)"; break; - case 0x07: str = "Private Numbering Plan (service provider defined)"; break; - case 0x0d: str = "ANSI SS7 Point Code (PC) and Subsystem Number (SSN)"; break; - case 0x0e: str = "Internet Protocol (IP) Address"; break; - case 0x0f: str = "Reserved for extension"; break; - default: - str = "Reserved"; - break; - } +static int +dissect_ansi_map_TDMAServiceCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Numbering Plan: %s", - bigbuf, str); + return offset; +} +static int dissect_tdmaServiceCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TDMAServiceCode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_tdmaServiceCode); +} - enc = value & 0x0f; - switch (enc) - { - case 0x00: str = "Not used"; break; - case 0x01: str = "BCD"; break; - case 0x02: str = "IA5"; break; - case 0x03: str = "Octet String"; break; - default: - str = "Reserved"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x0f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Encoding: %s", - bigbuf, str); - saved_offset = asn1->offset; +static int +dissect_ansi_map_TDMATerminalCapability(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - if (plan == 0x0d) - { - asn1_int32_value_decode(asn1, 1, &b1); - asn1_int32_value_decode(asn1, 1, &b2); - asn1_int32_value_decode(asn1, 1, &b3); - asn1_int32_value_decode(asn1, 1, &b4); - - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Point Code %u-%u-%u SSN %u", - b3, b2, b1, b4); - } - else if (plan == 0x0e) - { - asn1_int32_value_decode(asn1, 1, &b1); - asn1_int32_value_decode(asn1, 1, &b2); - asn1_int32_value_decode(asn1, 1, &b3); - asn1_int32_value_decode(asn1, 1, &b4); - - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "IP Address %u.%u.%u.%u", - b1, b2, b3, b4); - } - else - { - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_tdmaTerminalCapability(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TDMATerminalCapability(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_tdmaTerminalCapability); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Number of Digits: %u", - value); - if (enc == 0x02) - { - proto_tree_add_text(tree, asn1->tvb, - asn1->offset, value, - "IA5 Digits: %s", - tvb_format_text(asn1->tvb, asn1->offset, value)); - asn1->offset += value; - } - else if (enc == 0x01) - { - saved_offset = asn1->offset; - asn1_string_value_decode(asn1, (value+1)/2, &poctets); - - my_dgt_tbcd_unpack(bigbuf, poctets, (value+1)/2, &Dgt_tbcd); - g_free(poctets); - - if (searchable) - { - proto_tree_add_string_format(tree, hf_ansi_map_number, asn1->tvb, - saved_offset, (value+1)/2, - bigbuf, - "BCD Digits: %s", - bigbuf); - } - else - { - proto_tree_add_text(tree, asn1->tvb, - saved_offset, (value+1)/2, - "BCD Digits: %s", - bigbuf); - } - } - } -} +static int +dissect_ansi_map_TDMAVoiceCoder(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); -static void -param_digits(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - param_digits_basic(asn1, tree, len, FALSE); + return offset; } - -static void -param_mdn(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - param_digits_basic(asn1, tree, len, TRUE); +static int dissect_tdmaVoiceCoder_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TDMAVoiceCoder(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_tdmaVoiceCoder); } -static void -param_esn(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) -{ - gint32 value; - guint saved_offset; - EXACT_DATA_CHECK(len, 4); - saved_offset = asn1->offset; +static int +dissect_ansi_map_UserZoneData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_userZoneData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_UserZoneData(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_userZoneData); +} + + +static const ber_sequence_t FacilitiesDirective2_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_channelData_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_interSwitchCount_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 197, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_baseStationManufacturerCode_impl }, + { BER_CLASS_CON, 75, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertCode_impl }, + { BER_CLASS_CON, 356, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdma2000HandoffInvokeIOSData_impl }, + { BER_CLASS_CON, 62, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaCallMode_impl }, + { BER_CLASS_CON, 63, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaChannelData_impl }, + { BER_CLASS_CON, 212, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaConnectionReferenceList_impl }, + { BER_CLASS_CON, 66, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaMobileProtocolRevision_impl }, + { BER_CLASS_CON, 351, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaMSMeasuredChannelIdentity_impl }, + { BER_CLASS_CON, 67, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaPrivateLongCodeMask_impl }, + { BER_CLASS_CON, 174, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceConfigurationRecord_impl }, + { BER_CLASS_CON, 176, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOptionList_impl }, + { BER_CLASS_CON, 60, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServingOneWayDelay_impl }, + { BER_CLASS_CON, 59, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaStationClassMark_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaStationClassMark2_impl }, + { BER_CLASS_CON, 136, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaTargetMAHOList_impl }, + { BER_CLASS_CON, 134, BER_FLAGS_IMPLTAG, dissect_cdmaTargetMeasurementList_impl }, + { BER_CLASS_CON, 39, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_confidentialityModes_impl }, + { BER_CLASS_CON, 215, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataKey_impl }, + { BER_CLASS_CON, 216, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataPrivacyParameters_impl }, + { BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_handoffReason_impl }, + { BER_CLASS_CON, 164, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_handoffState_impl }, + { BER_CLASS_CON, 217, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ilspInformation_impl }, + { BER_CLASS_CON, 70, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_msLocation_impl }, + { BER_CLASS_CON, 165, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nampsCallMode_impl }, + { BER_CLASS_CON, 74, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nampsChannelData_impl }, + { BER_CLASS_CON, 40, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariable_impl }, + { BER_CLASS_CON, 200, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nonPublicData_impl }, + { BER_CLASS_CON, 349, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pdsnAddress_impl }, + { BER_CLASS_CON, 350, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pdsnProtocolType_impl }, + { BER_CLASS_CON, 348, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_qosPriority_impl }, + { BER_CLASS_CON, 45, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_signalingMessageEncryptionKey_impl }, + { BER_CLASS_CON, 18, BER_FLAGS_IMPLTAG, dissect_stationClassMark_impl }, + { BER_CLASS_CON, 206, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_systemOperatorCode_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_targetCellID_impl }, + { BER_CLASS_CON, 220, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBandwidth_impl }, + { BER_CLASS_CON, 31, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBurstIndicator_impl }, + { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaCallMode_impl }, + { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaChannelData_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { BER_CLASS_CON, 179, BER_FLAGS_OPTIONAL, dissect_tdmaTerminalCapability }, + { BER_CLASS_CON, 180, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaVoiceCoder_impl }, + { BER_CLASS_CON, 47, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminalType_impl }, + { BER_CLASS_CON, 209, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_userZoneData_impl }, + { BER_CLASS_CON, 48, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voicePrivacyMask_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 4, &value); +static int +dissect_ansi_map_FacilitiesDirective2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + FacilitiesDirective2_set, hf_index, ett_ansi_map_FacilitiesDirective2); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "ESN 0x%04x", - value); + return offset; +} - g_snprintf(add_string, string_len, " - 0x%04x", value); + + +static int +dissect_ansi_map_BSMCStatus(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_bsmcstatus_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_BSMCStatus(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_bsmcstatus); } -static void -param_sms_noti(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_CDMA2000HandoffResponseIOSData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_cdma2000HandoffResponseIOSData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMA2000HandoffResponseIOSData(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdma2000HandoffResponseIOSData); +} - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Notify when available"; break; - case 2: str = "Do not notify when available"; break; - default: - if ((value >= 3) && (value <= 127)) { str = "Reserved, treat as Notify when available"; } - else if ((value >= 128) && (value <= 223)) { str = "Reserved, treat as Do not notify when available"; } - else { str = "Reserved for protocol extension"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s (%u)", - str, - value); - EXTRANEOUS_DATA_CHECK(len, 1); +static int +dissect_ansi_map_CDMACodeChannel(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_cdmaCodeChannel_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMACodeChannel(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaCodeChannel); } -static void -param_sms_orig_restric(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_CDMAPilotPN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); + return offset; +} +static int dissect_cdmaPilotPN_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAPilotPN(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaPilotPN); +} - switch (value & 0x08) - { - case 0x00: str = "No effect"; break; - default: - str = "Force indirect"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Force Message Center, %s", - bigbuf, str); - switch (value & 0x04) - { - case 0x00: str = "Block direct"; break; - default: - str = "Allow direct"; - break; - } +static int +dissect_ansi_map_CDMAPowerCombinedIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : DIRECT, %s", - bigbuf, str); + return offset; +} +static int dissect_cdmaPowerCombinedIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMAPowerCombinedIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaPowerCombinedIndicator); +} - switch (value & 0x03) - { - case 0x00: str = "Block all"; break; - case 0x02: str = "Allow specific"; break; - case 0x03: str = "Allow all"; break; - default: - str = "Reserved"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : DEFAULT, %s", - bigbuf, str); +static const ber_sequence_t CDMACodeChannelInformation_sequence[] = { + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_targetCellID_impl }, + { BER_CLASS_CON, 68, BER_FLAGS_IMPLTAG, dissect_cdmaCodeChannel_impl }, + { BER_CLASS_CON, 173, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaPilotPN_impl }, + { BER_CLASS_CON, 228, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaPowerCombinedIndicator_impl }, + { 0, 0, 0, NULL } +}; - EXTRANEOUS_DATA_CHECK(len, 1); +static int +dissect_ansi_map_CDMACodeChannelInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + CDMACodeChannelInformation_sequence, hf_index, ett_ansi_map_CDMACodeChannelInformation); + + return offset; +} +static int dissect_CDMACodeChannelList_item_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMACodeChannelInformation(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_CDMACodeChannelList_item); } -static void -param_seizure(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; +static const ber_sequence_t CDMACodeChannelList_sequence_of[1] = { + { BER_CLASS_CON, 131, BER_FLAGS_IMPLTAG, dissect_CDMACodeChannelList_item_impl }, +}; + +static int +dissect_ansi_map_CDMACodeChannelList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + CDMACodeChannelList_sequence_of, hf_index, ett_ansi_map_CDMACodeChannelList); + + return offset; +} +static int dissect_cdmaCodeChannelList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMACodeChannelList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaCodeChannelList); +} - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Unspecified"; break; - case 1: str = "Loopback"; break; - default: - if ((value >= 2) && (value <= 223)) { str = "Reserved"; } - else { str = "Reserved for protocol extension"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static int +dissect_ansi_map_CDMASearchParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_cdmaSearchParameters_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMASearchParameters(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaSearchParameters); } -static void -param_sms_tele(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - ansi_map_sms_tele_id = -1; - SHORT_DATA_CHECK(len, 2); +static int +dissect_ansi_map_CDMASearchWindow(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - saved_offset = asn1->offset; + return offset; +} +static int dissect_cdmaSearchWindow_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMASearchWindow(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaSearchWindow); +} - asn1_int32_value_decode(asn1, 2, &value); - str = match_strval(value, ansi_tele_strings); - if (str == NULL) - { - switch (value) - { - case 0: str = "Not used"; break; - default: - if ((value >= 2) && (value <= 4095)) { str = "Reserved for assignment by TIA/EIA-41"; } - else if ((value >= 4100) && (value <= 32512)) { str = "Reserved for assignment by TIA/EIA-41"; } - else if ((value >= 32514) && (value <= 32639)) { str = "Reserved for assignment by this Standard for TDMA MS-based SMEs."; } - else if ((value >= 32640) && (value <= 32767)) { str = "Reserved for carrier specific teleservices for TDMA MS-based SMEs."; } - else if ((value >= 32768) && (value <= 49151)) { str = "Reserved for node specific teleservices."; } - else if ((value >= 49152) && (value <= 65535)) { str = "Reserved for carrier specific teleservices."; } - else { str = "Unknown teleservice ID"; } - break; - } - } - ansi_map_sms_tele_id = value; +static int +dissect_ansi_map_SOCStatus(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_sOCStatus_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SOCStatus(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sOCStatus); +} + + +static const ber_sequence_t FacilitiesDirective2Res_set[] = { + { BER_CLASS_CON, 198, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_bsmcstatus_impl }, + { BER_CLASS_CON, 357, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdma2000HandoffResponseIOSData_impl }, + { BER_CLASS_CON, 63, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaChannelData_impl }, + { BER_CLASS_CON, 132, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaCodeChannelList_impl }, + { BER_CLASS_CON, 212, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaConnectionReferenceList_impl }, + { BER_CLASS_CON, 230, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaSearchParameters_impl }, + { BER_CLASS_CON, 69, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaSearchWindow_impl }, + { BER_CLASS_CON, 174, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceConfigurationRecord_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_channelData_impl }, + { BER_CLASS_CON, 39, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_confidentialityModes_impl }, + { BER_CLASS_CON, 217, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ilspInformation_impl }, + { BER_CLASS_CON, 74, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nampsChannelData_impl }, + { BER_CLASS_CON, 205, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sOCStatus_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_targetCellID_impl }, + { BER_CLASS_CON, 31, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBurstIndicator_impl }, + { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaChannelData_impl }, + { BER_CLASS_CON, 180, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaVoiceCoder_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_FacilitiesDirective2Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + FacilitiesDirective2Res_set, hf_index, ett_ansi_map_FacilitiesDirective2Res); + + return offset; +} + + +static const value_string ansi_map_ReleaseReason_vals[] = { + { 0, "unspecified" }, + { 1, "callOverClearForward" }, + { 2, "callOverClearBackward" }, + { 3, "handoffSuccessful" }, + { 4, "handoffAbort-call-over" }, + { 5, "handoffAbort-not-received" }, + { 6, "abnormalMobileTermination" }, + { 7, "abnormalSwitchTermination" }, + { 8, "specialFeatureRelease" }, + { 9, "sessionOverClearForward" }, + { 10, "sessionOverClearBackward" }, + { 11, "clearAllServicesForward" }, + { 12, "clearAllServicesBackward" }, + { 13, "anchor-MSC-was-removed-from-the-packet-data-session" }, + { 14, "keep-MS-on-traffic-channel" }, + { 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s (%u)", - str, - value); - EXTRANEOUS_DATA_CHECK(len, 2); +static int +dissect_ansi_map_ReleaseReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_releaseReason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ReleaseReason(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_releaseReason); } -static void -param_sms_term_restric(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; +static const ber_sequence_t FacilitiesRelease_set[] = { + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 10, BER_FLAGS_IMPLTAG, dissect_releaseReason_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_FacilitiesRelease(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + FacilitiesRelease_set, hf_index, ett_ansi_map_FacilitiesRelease); - other_decode_bitfield_value(bigbuf, value, 0xf8, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); + return offset; +} - switch (value & 0x04) - { - case 0x00: str = "Block messages charged to destination"; break; - default: - str = "Allow messages charged to destination"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reverse Charges, %s", - bigbuf, str); +static const ber_sequence_t FacilitiesReleaseRes_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { 0, 0, 0, NULL } +}; - switch (value & 0x03) - { - case 0x00: str = "Block all"; break; - case 0x02: str = "Allow specific"; break; - case 0x03: str = "Allow all"; break; - default: - str = "Reserved"; - break; - } +static int +dissect_ansi_map_FacilitiesReleaseRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + FacilitiesReleaseRes_set, hf_index, ett_ansi_map_FacilitiesReleaseRes); + + return offset; +} - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : DEFAULT, %s", - bigbuf, str); - EXTRANEOUS_DATA_CHECK(len, 1); + +static int +dissect_ansi_map_ACGEncountered(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_acgencountered_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ACGEncountered(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_acgencountered); } -static void -param_sms_msg_count(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - char *buf; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_CallingPartyName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 313 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_callingpartyname(parameter_tvb,pinfo,tree); + } - switch (value) - { - case 0: str = "No more pending SMS messages"; break; - default: - buf=ep_alloc(64); - g_snprintf(buf, 64, "%u pending SMS messages", value); - str = buf; - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_callingPartyName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CallingPartyName(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_callingPartyName); } -static void -param_qos_pri(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value, temp_int; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_CallingPartyNumberDigits1(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - temp_int = (value & 0xf0) >> 4; - if ((temp_int < 0) || (temp_int >= (gint) NUM_QOS_PRI_STR)) - { - str = "Reserved"; - } - else - { - str = qos_pri_str[temp_int]; - } + return offset; +} +static int dissect_callingPartyNumberDigits1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CallingPartyNumberDigits1(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_callingPartyNumberDigits1); +} - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Assured Priority, %s", - bigbuf, - str); - temp_int = value & 0x0f; - if ((temp_int < 0) || (temp_int >= (gint) NUM_QOS_PRI_STR)) - { - str = "Reserved"; - } - else - { - str = qos_pri_str[temp_int]; - } - other_decode_bitfield_value(bigbuf, value, 0x0f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Non-Assured Priority, %s", - bigbuf, - str); +static int +dissect_ansi_map_CallingPartyNumberDigits2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_callingPartyNumberDigits2_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CallingPartyNumberDigits2(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_callingPartyNumberDigits2); } -static void -param_calling_party_cat(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_Subaddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 58 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_subaddress(parameter_tvb,pinfo,tree); + } + - asn1_int32_value_decode(asn1, 1, &value); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Calling Party's Category, Refer to ITU-T Q.763 (Signalling System No. 7 ISDN user part formats and codes) for encoding of this parameter"); + return offset; } -/* - * Dissect IOS data parameters expected to be in TLV format - */ -static void -dissect_cdma2000_ios_data(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) -{ - gint32 value; - guint num_elems; - guchar elem_len; - guint32 orig_offset, saved_offset; - proto_tree *subtree; - proto_item *item; - const gchar *str; - gint idx; - - num_elems = 0; - orig_offset = saved_offset = asn1->offset; - - while ((saved_offset - orig_offset + 2) <= len) - { - num_elems++; - asn1_int32_value_decode(asn1, 1, &value); - str = my_match_strval_idx((guint32) value, ansi_a_elem_1_strings, &idx); - asn1_octet_decode(asn1, &elem_len); +static int +dissect_ansi_map_CallingPartySubaddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_Subaddress(implicit_tag, tvb, offset, pinfo, tree, hf_index); - item = - proto_tree_add_text(tree, - asn1->tvb, saved_offset, elem_len + 2, - "IOS - %s", - str); + return offset; +} +static int dissect_callingPartySubaddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CallingPartySubaddress(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_callingPartySubaddress); +} - subtree = proto_item_add_subtree(item, ett_ansi_map_ios_elem[idx]); - proto_tree_add_none_format(subtree, hf_ansi_map_ios_elem_id, asn1->tvb, - saved_offset, 1, "Element ID"); - proto_tree_add_uint(subtree, hf_ansi_map_length, asn1->tvb, - saved_offset + 1, 1, elem_len); +static int +dissect_ansi_map_ConferenceCallingIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - if (elem_len > 0) - { - proto_tree_add_text(subtree, - asn1->tvb, saved_offset + 2, elem_len, - "Element Value"); + return offset; +} +static int dissect_conferenceCallingIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ConferenceCallingIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_conferenceCallingIndicator); +} - asn1->offset += elem_len; - } - saved_offset += elem_len + 2; - } - g_snprintf(add_string, string_len, " - (%u)", num_elems); +static int +dissect_ansi_map_MobileDirectoryNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - EXTRANEOUS_DATA_CHECK((len - (saved_offset - orig_offset)), 0); + return offset; +} +static int dissect_mobileDirectoryNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_MobileDirectoryNumber(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_mobileDirectoryNumber); } -static void -param_cdma2000_ho_ivk_ios(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) -{ - dissect_cdma2000_ios_data(asn1, tree, len, add_string, string_len); -} -static void -param_cdma2000_ho_rsp_ios(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) -{ +static int +dissect_ansi_map_MSCIdentificationNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - dissect_cdma2000_ios_data(asn1, tree, len, add_string, string_len); + return offset; +} +static int dissect_mSCIdentificationNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_MSCIdentificationNumber(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_mSCIdentificationNumber); } -static void -param_msid_usage(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_OneTimeFeatureIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 225 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_onetimefeatureindicator(parameter_tvb,pinfo,tree); + } - other_decode_bitfield_value(bigbuf, value, 0xfc, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - switch (value & 0x03) - { - case 0: str = "Not used"; break; - case 1: str = "MIN last used"; break; - case 2: str = "IMSI last used"; break; - case 3: str = "Reserved"; break; - } - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, - str); + return offset; +} +static int dissect_oneTimeFeatureIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_OneTimeFeatureIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_oneTimeFeatureIndicator); +} + + +static const ber_sequence_t FeatureRequest_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_interSwitchCount_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 340, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_acgencountered_impl }, + { BER_CLASS_CON, 243, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyName_impl }, + { BER_CLASS_CON, 80, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits1_impl }, + { BER_CLASS_CON, 81, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 62, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaCallMode_impl }, + { BER_CLASS_CON, 63, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaChannelData_impl }, + { BER_CLASS_CON, 66, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaMobileProtocolRevision_impl }, + { BER_CLASS_CON, 67, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaPrivateLongCodeMask_impl }, + { BER_CLASS_CON, 60, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServingOneWayDelay_impl }, + { BER_CLASS_CON, 59, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaStationClassMark_impl }, + { BER_CLASS_CON, 136, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaTargetMAHOList_impl }, + { BER_CLASS_CON, 134, BER_FLAGS_IMPLTAG, dissect_cdmaTargetMeasurementList_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_channelData_impl }, + { BER_CLASS_CON, 137, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_conferenceCallingIndicator_impl }, + { BER_CLASS_CON, 39, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_confidentialityModes_impl }, + { BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_handoffReason_impl }, + { BER_CLASS_CON, 164, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_handoffState_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 70, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_msLocation_impl }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 165, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nampsCallMode_impl }, + { BER_CLASS_CON, 74, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nampsChannelData_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 45, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_signalingMessageEncryptionKey_impl }, + { BER_CLASS_CON, 18, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_stationClassMark_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_targetCellID_impl }, + { BER_CLASS_CON, 31, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBurstIndicator_impl }, + { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaCallMode_impl }, + { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaChannelData_impl }, + { BER_CLASS_CON, 123, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { BER_CLASS_CON, 48, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voicePrivacyMask_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_FeatureRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + FeatureRequest_set, hf_index, ett_ansi_map_FeatureRequest); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; } -static void -param_new_min_ext(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 3); +static const value_string ansi_map_FeatureResult_vals[] = { + { 0, "not-used" }, + { 1, "unsuccessful" }, + { 2, "successful" }, + { 0, NULL } +}; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_FeatureResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_featureResult_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_FeatureResult(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_featureResult); +} + + +static const value_string ansi_map_AccessDeniedReason_vals[] = { + { 0, "not-used" }, + { 1, "unassigned-directory-number" }, + { 2, "inactive" }, + { 3, "busy" }, + { 4, "termination-denied" }, + { 5, "no-page-response" }, + { 6, "unavailable" }, + { 7, "service-Rejected-by-MS" }, + { 8, "services-Rejected-by-the-System" }, + { 9, "service-Type-Mismatch" }, + { 10, "service-Denied" }, + { 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : MCC_M (MSB), see CDMA", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x0e, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : IMSI_M_ADDR_NUM, see CDMA", - bigbuf); +static int +dissect_ansi_map_AccessDeniedReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : IMSI_M_CLASS, see CDMA", - bigbuf); + return offset; +} +static int dissect_accessDeniedReason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AccessDeniedReason(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_accessDeniedReason); +} - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, - str); - bigbuf[0] = Dgt_tbcd.out[(value & 0xf0) >> 4]; - saved_offset = asn1->offset; +static int +dissect_ansi_map_ActionCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_actionCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ActionCode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_actionCode); +} +static int dissect_ctionCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ActionCode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_ctionCode); +} - bigbuf[1] = Dgt_tbcd.out[value & 0x0f]; - bigbuf[2] = Dgt_tbcd.out[(value & 0xf0) >> 4]; - bigbuf[3] = '\0'; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "MCC_M, %s, see CDMA", - bigbuf); - saved_offset = asn1->offset; +static int +dissect_ansi_map_AnnouncementCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 74 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_announcementcode(parameter_tvb,pinfo,tree); + } - asn1_int32_value_decode(asn1, 1, &value); - bigbuf[0] = Dgt_tbcd.out[value & 0x0f]; - bigbuf[1] = Dgt_tbcd.out[(value & 0xf0) >> 4]; - bigbuf[2] = '\0'; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "IMSI_11_12, %s, see CDMA", - bigbuf); + return offset; +} +static int dissect_announcementCode1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AnnouncementCode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_announcementCode1); +} +static int dissect_announcementCode2_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AnnouncementCode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_announcementCode2); } -static void -param_dtx_ind(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; +static const ber_sequence_t AnnouncementList_sequence[] = { + { BER_CLASS_CON, 76, BER_FLAGS_IMPLTAG, dissect_announcementCode1_impl }, + { BER_CLASS_CON, 76, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_announcementCode2_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_AnnouncementList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + AnnouncementList_sequence, hf_index, ett_ansi_map_AnnouncementList); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_announcementList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AnnouncementList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_announcementList); +} - other_decode_bitfield_value(bigbuf, value, 0xfe, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - switch (value & 0x01) - { - case 0: str = "Discontinuous Transmission mode is not active"; break; - case 1: str = "Discontinuous Transmission mode is active"; break; - } - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, - str); +static int +dissect_ansi_map_CallingPartyNumberString1(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_callingPartyNumberString1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CallingPartyNumberString1(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_callingPartyNumberString1); } -static void -param_cdma_mob_cap(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_CallingPartyNumberString2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_callingPartyNumberString2_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CallingPartyNumberString2(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_callingPartyNumberString2); +} - other_decode_bitfield_value(bigbuf, value, 0xfe, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - switch (value & 0x01) - { - case 0: str = "No MS-initiated position determination"; break; - case 1: str = "MS-initiated position determination"; break; - } - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, - str); +static int +dissect_ansi_map_DisplayText(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_displayText_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DisplayText(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_displayText); } -static void -param_gen_time(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - gint32 h, m, s, ts; - guint saved_offset; - SHORT_DATA_CHECK(len, 6); - saved_offset = asn1->offset; +static int +dissect_ansi_map_DisplayText2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_displayText2_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DisplayText2(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_displayText2); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Year-2000, %u", - value); - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_DMH_AccountCodeDigits(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Month, %u", - value); + return offset; +} +static int dissect_dmh_AccountCodeDigits_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DMH_AccountCodeDigits(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_dmh_AccountCodeDigits); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Day of month, %u", - value); +static int +dissect_ansi_map_DMH_AlternateBillingDigits(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - saved_offset = asn1->offset; + return offset; +} +static int dissect_dmh_AlternateBillingDigits_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DMH_AlternateBillingDigits(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_dmh_AlternateBillingDigits); +} - asn1_int32_value_decode(asn1, 3, &value); - h = value / (3600 * 10); - m = (value - (h * (3600 * 10))) / (60 * 10); - s = (value - (h * (3600 * 10)) - (m * (60 * 10))) / 10; - ts = (value - (h * (3600 * 10)) - (m * (60 * 10)) - (s * 10)); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Time of day (UTC) (in tenths of seconds - 1), %u (%u:%u:%u.%u)", - value, - h, - m, - s, - ts); +static int +dissect_ansi_map_DMH_BillingDigits(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - EXTRANEOUS_DATA_CHECK(len, 6); + return offset; +} +static int dissect_dmh_BillingDigits_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DMH_BillingDigits(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_dmh_BillingDigits); } -static void -param_geo_pos(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - guint saved_offset; - saved_offset = asn1->offset; +static const value_string ansi_map_DMH_RedirectionIndicator_vals[] = { + { 0, "not-specified" }, + { 0, NULL } +}; + + +static int +dissect_ansi_map_DMH_RedirectionIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len, - "Calling Geodetic Location (CGL), see T1.628 CallingGeodeticLocation TCAP parameter for encoding"); + return offset; +} +static int dissect_dmh_RedirectionIndicator(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DMH_RedirectionIndicator(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_dmh_RedirectionIndicator); +} +static int dissect_dmh_RedirectionIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DMH_RedirectionIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_dmh_RedirectionIndicator); } -static void -param_mob_call_status(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value, auth; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_GroupInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - auth = (value & 0xf0) >> 4; - switch (auth) - { - case 0: str = "Authorization not performed"; break; - case 1: str = "Authorization successful"; break; - case 2: str = "Invalid Electronic Serial Number (ESN)"; break; - case 3: str = "Unassigned Directory Number (DN)"; break; - case 4: str = "Duplicate Unit"; break; - case 5: str = "Delinquent Account"; break; - case 6: str = "Stolen Unit"; break; - case 7: str = "Not authorized for MSC"; break; - case 8: str = "Unspecified"; break; - default: - str = "Reserved, treat as Authorization not performed"; - break; - } + return offset; +} +static int dissect_groupInformation(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_GroupInformation(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_groupInformation); +} +static int dissect_groupInformation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_GroupInformation(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_groupInformation); +} - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Authorization, %s", - bigbuf, - str); - auth = value & 0x0f; - switch (auth) - { - case 0: str = "Authentication not performed. Authentication has not yet occurred or the MS is not capable of authentication"; break; - case 1: str = "Authentication successful. Authentication has successfully occurred on the MS"; break; - case 2: str = "Authentication failure. An authentication failure has occurred on the MS"; break; - default: - str = "Reserved, treat as Authentication not performed"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x0f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Authentication, %s", - bigbuf, - str); +static int +dissect_ansi_map_NoAnswerTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_noAnswerTime_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_NoAnswerTime(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_noAnswerTime); } -static void -param_pos_req_type(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_PACAIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 241 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_pacaindicator(parameter_tvb,pinfo,tree); + } - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Initial position. Return updated position only if initial position is unavailable."; break; - case 2: str = "Return the updated position"; break; - case 3: str = "Return the updated or last known position"; break; - case 4: str = "Reserved for LSP interface. Treat as Not used"; break; - default: - if ((value >= 5) && (value <= 95)) { str = "Reserved, treat as Initial position"; } - else { str = "Reserved for protocol extension, treat as Initial position"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Position Request Type, %s", - str); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_pACAIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PACAIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_pACAIndicator); } -static void -param_pos_result(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_PilotNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Initial position returned"; break; - case 2: str = "Updated position returned"; break; - case 3: str = "Last known position returned"; break; - case 4: str = "Requested position is not available"; break; - case 5: str = "Caller disconnected. No call in progress for caller identified"; break; - case 6: str = "Caller has handed-off. Position is unavailable due to a hand-off (e.g. handoff to a position incapable system)"; break; - case 7: str = "Identified MS is inactive or has roamed to another system"; break; - case 8: str = "Unresponsive"; break; - case 9: str = "Identified MS is responsive, but refused position request"; break; - case 10: str = "System Failure"; break; - case 11: str = "MSID is not known"; break; - case 12: str = "Callback number is not known"; break; - case 13: str = "Improper request (e.g. invalid channel information, invalid ESN)"; break; - case 14: str = "Mobile channel information returned"; break; - case 15: str = "Signal not detected"; break; - case 16: str = "PDE Timeout"; break; - case 17: str = "Position pending"; break; - case 18: str = "TDMA MAHO Information Returned"; break; - case 19: str = "TDMA MAHO Information is not available"; break; - default: - if ((value >= 20) && (value <= 223)) { str = "Reserved, treat as Not used"; } - else { str = "Reserved for protocol extension, treat as Not used"; } - break; - } + return offset; +} +static int dissect_pilotNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PilotNumber(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_pilotNumber); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Position Result, %s", - str); - EXTRANEOUS_DATA_CHECK(len, 1); -} -static void -param_pos_source(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +static int +dissect_ansi_map_PreferredLanguageIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - saved_offset = asn1->offset; + return offset; +} +static int dissect_preferredLanguageIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PreferredLanguageIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_preferredLanguageIndicator); +} - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Network Unspecified"; break; - case 2: str = "Network AOA (Angle of Arrival)"; break; - case 3: str = "Network TOA (Time of Arrival)"; break; - case 4: str = "Network TDOA (Time Difference of Arrival)"; break; - case 5: str = "Network RF Fingerprinting"; break; - case 6: str = "Network Cell/Sector"; break; - case 7: str = "Network Cell/Sector with Timing"; break; - case 16: str = "Handset Unspecified"; break; - case 17: str = "Handset GPS"; break; - case 18: str = "Handset AGPS (Assisted GPS)"; break; - case 19: str = "Handset EOTD (Enhanced Observed Time Difference)"; break; - case 20: str = "Handset AFLT (Advanced Forward Link Trilateration)"; break; - case 21: str = "Handset EFLT (Enhanced Forward Link Trilateration)"; break; - default: - if ((value >= 8) && (value <= 15)) { str = "Reserved, treat as Network Unspecified"; } - else if ((value >= 22) && (value <= 31)) { str = "Reserved, treat as Handset Unspecified"; } - else { str = "Reserved for protocol extension, treat as Not used"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Position Source, %s", - str); +static int +dissect_ansi_map_RedirectingNumberDigits(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_redirectingNumberDigits_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RedirectingNumberDigits(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_redirectingNumberDigits); +} +static int dissect_edirectingNumberDigits_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RedirectingNumberDigits(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_edirectingNumberDigits); } -static void -param_acg_encounter(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_RedirectingNumberString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_redirectingNumberString_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RedirectingNumberString(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_redirectingNumberString); +} - switch ((value & 0xc0) >> 6) - { - case 0: str = "Not used"; break; - case 1: str = "Service Management System Initiated control encountered"; break; - case 2: str = "SCF Overload control encountered"; break; - case 3: str = "Reserved, treat as Not used"; break; - } - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Control Type, %s", - bigbuf, - str); - switch (value & 0x3f) - { - case 0: str = "PC_SSN"; break; - case 1: str = "1-digit control"; break; - case 2: str = "2-digit control"; break; - case 3: str = "3-digit control"; break; - case 4: str = "4-digit control"; break; - case 5: str = "5-digit control"; break; - case 6: str = "6-digit control"; break; - case 7: str = "7-digit control"; break; - case 8: str = "8-digit control"; break; - case 9: str = "9-digit control"; break; - case 10: str = "10-digit control"; break; - case 11: str = "11-digit control"; break; - case 12: str = "12-digit control"; break; - case 13: str = "13-digit control"; break; - case 14: str = "14-digit control"; break; - case 15: str = "15-digit control"; break; - default: - str = "Reserved, treat as 15-digit control"; - break; - } +static int +dissect_ansi_map_RedirectingSubaddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_Subaddress(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_redirectingSubaddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RedirectingSubaddress(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_redirectingSubaddress); +} +static int dissect_edirectingSubaddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RedirectingSubaddress(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_edirectingSubaddress); +} + + +static const value_string ansi_map_ResumePIC_vals[] = { + { 1, "continue-Call-Processing" }, + { 2, "collect-Information-PIC" }, + { 3, "analyze-Information-PIC" }, + { 4, "select-Route-PIC" }, + { 5, "authorize-Origination-Attempt-PIC" }, + { 6, "authorize-Call-Setup-PIC" }, + { 7, "send-Call-PIC" }, + { 8, "o-Alerting-PIC" }, + { 9, "o-Active-PIC" }, + { 10, "o-Suspended-PIC" }, + { 11, "o-Null-PIC" }, + { 32, "select-Facility-PIC" }, + { 33, "present-Call-PIC" }, + { 34, "authorize-Termination-Attempt-PIC" }, + { 35, "t-Alerting-PIC" }, + { 36, "t-Active-PIC" }, + { 37, "t-Suspended-PIC" }, + { 38, "t-Null-PIC" }, + { 0, NULL } +}; + + +static int +dissect_ansi_map_ResumePIC(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0x3f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, - str); + return offset; +} +static int dissect_resumePIC_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ResumePIC(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_resumePIC); } -static void -param_ctrl_type(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_LegInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_legInformation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_LegInformation(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_legInformation); +} - switch ((value & 0xc0) >> 6) - { - case 0: str = "Not used"; break; - case 1: str = "Service Management System Initiated control"; break; - case 2: str = "SCF Overload control"; break; - case 3: str = "Reserved, treat as Not used"; break; - } - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Control Type, %s", - bigbuf, - str); - switch (value & 0x3f) - { - case 0: str = "PC_SSN"; break; - case 1: str = "1-digit control"; break; - case 2: str = "2-digit control"; break; - case 3: str = "3-digit control"; break; - case 4: str = "4-digit control"; break; - case 5: str = "5-digit control"; break; - case 6: str = "6-digit control"; break; - case 7: str = "7-digit control"; break; - case 8: str = "8-digit control"; break; - case 9: str = "9-digit control"; break; - case 10: str = "10-digit control"; break; - case 11: str = "11-digit control"; break; - case 12: str = "12-digit control"; break; - case 13: str = "13-digit control"; break; - case 14: str = "14-digit control"; break; - case 15: str = "15-digit control"; break; - default: - str = "Reserved, treat as 15-digit control"; - break; - } +static int +dissect_ansi_map_TerminationTriggers(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 294 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_terminationtriggers(parameter_tvb,pinfo,tree); + } - other_decode_bitfield_value(bigbuf, value, 0x3f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, - str); -} -static void -param_gap_duration(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); + return offset; +} +static int dissect_terminationTriggers_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TerminationTriggers(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_terminationTriggers); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static const ber_sequence_t IntersystemTermination_sequence[] = { + { BER_CLASS_CON, 87, BER_FLAGS_IMPLTAG, dissect_destinationDigits_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_accessDeniedReason_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 242, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 288, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_legInformation_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 122, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTriggers_impl }, + { 0, 0, 0, NULL } +}; - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "1 second"; break; - case 2: str = "2 seconds"; break; - case 3: str = "4 seconds"; break; - case 4: str = "8 seconds"; break; - case 5: str = "16 seconds"; break; - case 6: str = "32 seconds"; break; - case 7: str = "64 seconds"; break; - case 8: str = "128 seconds"; break; - case 9: str = "256 seconds"; break; - case 10: str = "512 seconds"; break; - case 11: str = "1024 seconds"; break; - case 12: str = "2048 seconds"; break; - case 13: str = "Infinity"; break; - default: - str = "Reserved, treat as Not used"; - break; - } +static int +dissect_ansi_map_IntersystemTermination(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + IntersystemTermination_sequence, hf_index, ett_ansi_map_IntersystemTermination); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); + return offset; +} +static int dissect_intersystemTermination_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_IntersystemTermination(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_intersystemTermination); } -static void -param_scf_overload_gap_int(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_TerminationTreatment(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_terminationTreatment_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TerminationTreatment(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_terminationTreatment); +} + - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "0 seconds"; break; - case 1: str = "3 seconds"; break; - case 2: str = "4 seconds"; break; - case 3: str = "6 seconds"; break; - case 4: str = "8 seconds"; break; - case 5: str = "11 seconds"; break; - case 6: str = "16 seconds"; break; - case 7: str = "22 seconds"; break; - case 8: str = "30 seconds"; break; - case 9: str = "42 seconds"; break; - case 10: str = "58 seconds"; break; - case 11: str = "81 seconds"; break; - case 12: str = "112 seconds"; break; - case 13: str = "156 seconds"; break; - case 14: str = "217 seconds"; break; - case 15: str = "300 seconds"; break; - case 16: str = "Remove gap control"; break; - case 17: str = "0.10 seconds"; break; - case 18: str = "0.25 seconds"; break; - case 19: str = "0.5 seconds"; break; - case 20: str = "1 second"; break; - case 21: str = "2 seconds"; break; - default: - str = "Reserved, treat as 0 seconds"; - break; - } +static int +dissect_ansi_map_VoiceMailboxPIN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); + return offset; +} +static int dissect_voiceMailboxPIN_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_VoiceMailboxPIN(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_voiceMailboxPIN); } -static void -param_tdma_time_align(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_VoiceMailboxNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_voiceMailboxNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_VoiceMailboxNumber(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_voiceMailboxNumber); +} + + +static const ber_sequence_t LocalTermination_sequence[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 121, BER_FLAGS_IMPLTAG, dissect_terminationTreatment_impl }, + { BER_CLASS_CON, 75, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertCode_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 87, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_destinationDigits_impl }, + { BER_CLASS_CON, 242, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 288, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_legInformation_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 122, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTriggers_impl }, + { BER_CLASS_CON, 159, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voiceMailboxPIN_impl }, + { BER_CLASS_CON, 160, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voiceMailboxNumber_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_LocalTermination(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + LocalTermination_sequence, hf_index, ett_ansi_map_LocalTermination); + + return offset; +} +static int dissect_localTermination_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_LocalTermination(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_localTermination); +} - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +static const ber_sequence_t PSTNTermination_sequence[] = { + { BER_CLASS_CON, 87, BER_FLAGS_IMPLTAG, dissect_destinationDigits_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 242, BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 288, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_legInformation_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 122, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTriggers_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x1f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Time Alignment Offset (TA), %u", - bigbuf, - value & 0x1f); +static int +dissect_ansi_map_PSTNTermination(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PSTNTermination_sequence, hf_index, ett_ansi_map_PSTNTermination); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_pstnTermination_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PSTNTermination(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_pstnTermination); } -static void -dump_rssi(ASN1_SCK *asn1, proto_tree *tree, const gchar *leader) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; +static const value_string ansi_map_TerminationList_item_vals[] = { + { 89, "intersystemTermination" }, + { 91, "localTermination" }, + { 71, "pstnTermination" }, + { 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static const ber_choice_t TerminationList_item_choice[] = { + { 89, BER_CLASS_CON, 89, BER_FLAGS_IMPLTAG, dissect_intersystemTermination_impl }, + { 91, BER_CLASS_CON, 91, BER_FLAGS_IMPLTAG, dissect_localTermination_impl }, + { 71, BER_CLASS_CON, 71, BER_FLAGS_IMPLTAG, dissect_pstnTermination_impl }, + { 0, 0, 0, 0, NULL } +}; - switch ((value & 0xc0) >> 6) - { - case 0: str = "800 MHz"; break; - case 1: str = "1900 MHz"; break; - default: - str = "Reserved"; - break; - } +static int +dissect_ansi_map_TerminationList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + TerminationList_item_choice, hf_index, ett_ansi_map_TerminationList_item, + NULL); - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %sHyper, %s", - bigbuf, - leader, - str); - - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x1f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %sRSSI, %u", - bigbuf, - leader, - value & 0x1f); + return offset; +} +static int dissect_TerminationList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TerminationList_item(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_TerminationList_item); } -static void -param_tdma_maho_cell_id(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) -{ - gint32 value, num_rssi, num_msc; - guint saved_offset, orig_offset; - gint32 i, j; - - SHORT_DATA_CHECK(len, 3); - orig_offset = asn1->offset; +static const ber_sequence_t TerminationList_set_of[1] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_TerminationList_item }, +}; - dump_rssi(asn1, tree, "Serving Cell "); +static int +dissect_ansi_map_TerminationList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + TerminationList_set_of, hf_index, ett_ansi_map_TerminationList); - saved_offset = asn1->offset; + return offset; +} +static int dissect_terminationList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TerminationList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_terminationList); +} - asn1_int32_value_decode(asn1, 1, &num_rssi); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Number of RSSI %u", - num_rssi); - for (i = 0; i < num_rssi; i++) - { - if ((len - (asn1->offset - orig_offset)) < 3) - { - proto_tree_add_text(tree, asn1->tvb, - asn1->offset, len - (asn1->offset - orig_offset), - "Short Data (?)"); +static int +dissect_ansi_map_GlobalTitle(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1->offset += len - (asn1->offset - orig_offset); - return; - } + return offset; +} +static int dissect_globalTitle_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_GlobalTitle(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_globalTitle); +} - dump_rssi(asn1, tree, ""); - saved_offset = asn1->offset; +static const value_string ansi_map_DestinationAddress_vals[] = { + { 389, "globalTitle" }, + { 32, "pC-SSN" }, + { 0, NULL } +}; - asn1_int32_value_decode(asn1, 2, &value); +static const ber_choice_t DestinationAddress_choice[] = { + { 389, BER_CLASS_CON, 389, BER_FLAGS_IMPLTAG, dissect_globalTitle_impl }, + { 32, BER_CLASS_CON, 32, BER_FLAGS_IMPLTAG, dissect_pC_SSN_impl }, + { 0, 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Measured Cell ID %u", - value); - } +static int +dissect_ansi_map_DestinationAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + DestinationAddress_choice, hf_index, ett_ansi_map_DestinationAddress, + NULL); + + return offset; +} +static int dissect_destinationAddress(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DestinationAddress(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_destinationAddress); +} + + +static const value_string ansi_map_TriggerType_vals[] = { + { 1, "all-Calls" }, + { 2, "double-Introducing-Star" }, + { 3, "single-Introducing-Star" }, + { 4, "reserved-for-Home-System-Feature-Code" }, + { 5, "double-Introducing-Pound" }, + { 6, "single-Introducing-Pound" }, + { 7, "revertive-Call" }, + { 8, "a0-Digit" }, + { 9, "a1-Digit" }, + { 10, "a2-Digit" }, + { 11, "a3-Digit" }, + { 12, "a4-Digit" }, + { 13, "a5-Digit" }, + { 14, "a6-Digit" }, + { 15, "a7-Digit" }, + { 16, "a8-Digit" }, + { 17, "a9-Digit" }, + { 18, "a10-Digit" }, + { 19, "a11-Digit" }, + { 20, "a12-Digit" }, + { 21, "a13-Digit" }, + { 22, "a14-Digit" }, + { 23, "a15-Digit" }, + { 24, "local-Call" }, + { 25, "intra-LATA-Toll-Call" }, + { 26, "inter-LATA-Toll-Call" }, + { 27, "world-Zone-Call" }, + { 28, "international-Call" }, + { 29, "unrecognized-Number" }, + { 30, "prior-Agreement" }, + { 31, "specific-Called-Party-Digit-String" }, + { 32, "mobile-Termination" }, + { 33, "advanced-Termination" }, + { 34, "location" }, + { 35, "locally-Allowed-Specific-Digit-String" }, + { 36, "origination-Attempt-Authorized" }, + { 37, "calling-Routing-Address-Available" }, + { 38, "initial-Termination" }, + { 39, "called-Routing-Address-Available" }, + { 40, "o-Answer" }, + { 41, "o-Disconnect" }, + { 42, "o-Called-Party-Busy" }, + { 43, "o-No-Answer" }, + { 64, "terminating-Resource-Available" }, + { 65, "t-Busy" }, + { 66, "t-No-Answer" }, + { 67, "t-No-Page-Response" }, + { 68, "t-Routable" }, + { 69, "t-Answer" }, + { 70, "t-Disconnect" }, + { 220, "reserved-for-TDP-R-DP-Type-value" }, + { 221, "reserved-for-TDP-N-DP-Type-value" }, + { 222, "reserved-for-EDP-R-DP-Type-value" }, + { 223, "reserved-for-EDP-N-DP-Type-value" }, + { 0, NULL } +}; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &num_msc); +static int +dissect_ansi_map_TriggerType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Number of MSC %u", - num_msc); + return offset; +} +static int dissect_triggerType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TriggerType(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_triggerType); +} - for (i = 0; i < num_msc; i++) - { - if ((len - (asn1->offset - orig_offset)) < 4) - { - proto_tree_add_text(tree, asn1->tvb, - asn1->offset, len - (asn1->offset - orig_offset), - "Short Data (?)"); - asn1->offset += len - (asn1->offset - orig_offset); - return; - } +static const value_string ansi_map_DetectionPointType_vals[] = { + { 1, "tDP-R" }, + { 2, "tDP-N" }, + { 3, "eDP-R" }, + { 4, "eDP-N" }, + { 0, NULL } +}; - param_mscid(asn1, tree, 3, add_string, string_len); - saved_offset = asn1->offset; +static int +dissect_ansi_map_DetectionPointType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &num_rssi); + return offset; +} +static int dissect_detectionPointType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DetectionPointType(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_detectionPointType); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Number of RSSI %u", - num_rssi); - for (j = 0; j < num_rssi; j++) - { - if ((len - (asn1->offset - orig_offset)) < 3) - { - proto_tree_add_text(tree, asn1->tvb, - asn1->offset, len - (asn1->offset - orig_offset), - "Short Data (?)"); +static const ber_sequence_t WIN_Trigger_sequence[] = { + { BER_CLASS_CON, 279, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerType_impl }, + { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_detectionPointType }, + { 0, 0, 0, NULL } +}; - asn1->offset += len - (asn1->offset - orig_offset); - return; - } +static int +dissect_ansi_map_WIN_Trigger(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + WIN_Trigger_sequence, hf_index, ett_ansi_map_WIN_Trigger); - dump_rssi(asn1, tree, ""); + return offset; +} +static int dissect_WIN_TriggerList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_WIN_Trigger(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_WIN_TriggerList_item); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 2, &value); +static const ber_sequence_t WIN_TriggerList_set_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_WIN_TriggerList_item }, +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Measured Cell ID %u", - value); - } - } +static int +dissect_ansi_map_WIN_TriggerList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + WIN_TriggerList_set_of, hf_index, ett_ansi_map_WIN_TriggerList); - EXTRANEOUS_DATA_CHECK((len - (asn1->offset - orig_offset)), 0); + return offset; +} +static int dissect_wIN_TriggerList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_WIN_TriggerList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_wIN_TriggerList); } -static void -param_tdma_maho_chan(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) -{ - gint32 value, num_rssi, num_msc; - guint saved_offset, orig_offset; - gint32 i, j; - SHORT_DATA_CHECK(len, 3); +static const ber_sequence_t TriggerList_set[] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_destinationAddress }, + { BER_CLASS_CON, 283, BER_FLAGS_IMPLTAG, dissect_wIN_TriggerList_impl }, + { 0, 0, 0, NULL } +}; - orig_offset = asn1->offset; +static int +dissect_ansi_map_TriggerList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TriggerList_set, hf_index, ett_ansi_map_TriggerList); - dump_rssi(asn1, tree, "Serving Cell "); + return offset; +} +static int dissect_triggerList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TriggerList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_triggerList); +} +static int dissect_triggerListOpt_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TriggerList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_triggerListOpt); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &num_rssi); +static const ber_sequence_t TriggerAddressList_item_set[] = { + { BER_CLASS_CON, 278, BER_FLAGS_IMPLTAG, dissect_triggerList_impl }, + { BER_CLASS_CON, 278, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerListOpt_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Number of RSSI %u", - num_rssi); +static int +dissect_ansi_map_TriggerAddressList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TriggerAddressList_item_set, hf_index, ett_ansi_map_TriggerAddressList_item); - for (i = 0; i < num_rssi; i++) - { - if ((len - (asn1->offset - orig_offset)) < 3) - { - proto_tree_add_text(tree, asn1->tvb, - asn1->offset, len - (asn1->offset - orig_offset), - "Short Data (?)"); + return offset; +} +static int dissect_TriggerAddressList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TriggerAddressList_item(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_TriggerAddressList_item); +} - asn1->offset += len - (asn1->offset - orig_offset); - return; - } - dump_rssi(asn1, tree, ""); +static const ber_sequence_t TriggerAddressList_set_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_TriggerAddressList_item }, +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_TriggerAddressList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + TriggerAddressList_set_of, hf_index, ett_ansi_map_TriggerAddressList); + + return offset; +} +static int dissect_triggerAddressList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TriggerAddressList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_triggerAddressList); +} + + +static const ber_sequence_t FeatureRequestRes_set[] = { + { BER_CLASS_CON, 18, BER_FLAGS_IMPLTAG, dissect_featureResult_impl }, + { BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_accessDeniedReason_impl }, + { BER_CLASS_CON, 128, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_actionCode_impl }, + { BER_CLASS_CON, 130, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_announcementList_impl }, + { BER_CLASS_CON, 82, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString1_impl }, + { BER_CLASS_CON, 83, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 137, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_conferenceCallingIndicator_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_Destination_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 299, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText2_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 88, BER_FLAGS_OPTIONAL, dissect_dmh_RedirectionIndicator }, + { BER_CLASS_CON, 163, BER_FLAGS_OPTIONAL, dissect_groupInformation }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 96, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_noAnswerTime_impl }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 146, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pACAIndicator_impl }, + { BER_CLASS_CON, 168, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotNumber_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 101, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberString_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 394, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_resumePIC_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 120, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationList_impl }, + { BER_CLASS_CON, 122, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTriggers_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 2, &value); +static int +dissect_ansi_map_FeatureRequestRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + FeatureRequestRes_set, hf_index, ett_ansi_map_FeatureRequestRes); - other_decode_bitfield_value(bigbuf, value >> 8, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 1, - "%s : Measured Channel (MSB), %u", - bigbuf, - (value & 0xffe0) >> 5); + return offset; +} - other_decode_bitfield_value(bigbuf, value & 0xff, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset+1, 1, - "%s : Measured Channel (LSB)", - bigbuf); - } - saved_offset = asn1->offset; +static const ber_sequence_t FlashRequest_set[] = { + { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 39, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_confidentialityModes_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &num_msc); +static int +dissect_ansi_map_FlashRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + FlashRequest_set, hf_index, ett_ansi_map_FlashRequest); + + return offset; +} + + +static const ber_sequence_t HandoffBack_set[] = { + { BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_channelData_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_targetCellID_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 39, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_confidentialityModes_impl }, + { BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_handoffReason_impl }, + { BER_CLASS_CON, 164, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_handoffState_impl }, + { BER_CLASS_CON, 45, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_signalingMessageEncryptionKey_impl }, + { BER_CLASS_CON, 31, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBurstIndicator_impl }, + { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaCallMode_impl }, + { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaChannelData_impl }, + { BER_CLASS_CON, 48, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voicePrivacyMask_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Number of MSC %u", - num_msc); +static int +dissect_ansi_map_HandoffBack(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + HandoffBack_set, hf_index, ett_ansi_map_HandoffBack); - for (i = 0; i < num_msc; i++) - { - if ((len - (asn1->offset - orig_offset)) < 4) - { - proto_tree_add_text(tree, asn1->tvb, - asn1->offset, len - (asn1->offset - orig_offset), - "Short Data (?)"); + return offset; +} - asn1->offset += len - (asn1->offset - orig_offset); - return; - } - param_mscid(asn1, tree, 3, add_string, string_len); +static const ber_sequence_t HandoffBackRes_set[] = { + { BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_channelData_impl }, + { BER_CLASS_CON, 39, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_confidentialityModes_impl }, + { BER_CLASS_CON, 31, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBurstIndicator_impl }, + { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaChannelData_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_HandoffBackRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + HandoffBackRes_set, hf_index, ett_ansi_map_HandoffBackRes); + + return offset; +} + + +static const ber_sequence_t HandoffBack2_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 197, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_baseStationManufacturerCode_impl }, + { BER_CLASS_CON, 356, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdma2000HandoffInvokeIOSData_impl }, + { BER_CLASS_CON, 62, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaCallMode_impl }, + { BER_CLASS_CON, 63, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaChannelData_impl }, + { BER_CLASS_CON, 212, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaConnectionReferenceList_impl }, + { BER_CLASS_CON, 351, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaMSMeasuredChannelIdentity_impl }, + { BER_CLASS_CON, 66, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaMobileProtocolRevision_impl }, + { BER_CLASS_CON, 174, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceConfigurationRecord_impl }, + { BER_CLASS_CON, 176, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOptionList_impl }, + { BER_CLASS_CON, 67, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaPrivateLongCodeMask_impl }, + { BER_CLASS_CON, 60, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServingOneWayDelay_impl }, + { BER_CLASS_CON, 59, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaStationClassMark_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaStationClassMark2_impl }, + { BER_CLASS_CON, 136, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaTargetMAHOList_impl }, + { BER_CLASS_CON, 134, BER_FLAGS_IMPLTAG, dissect_cdmaTargetMeasurementList_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_channelData_impl }, + { BER_CLASS_CON, 39, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_confidentialityModes_impl }, + { BER_CLASS_CON, 215, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataKey_impl }, + { BER_CLASS_CON, 216, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataPrivacyParameters_impl }, + { BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_handoffReason_impl }, + { BER_CLASS_CON, 164, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_handoffState_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_interSwitchCount_impl }, + { BER_CLASS_CON, 217, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ilspInformation_impl }, + { BER_CLASS_CON, 70, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_msLocation_impl }, + { BER_CLASS_CON, 165, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nampsCallMode_impl }, + { BER_CLASS_CON, 74, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nampsChannelData_impl }, + { BER_CLASS_CON, 349, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pdsnAddress_impl }, + { BER_CLASS_CON, 350, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pdsnProtocolType_impl }, + { BER_CLASS_CON, 348, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_qosPriority_impl }, + { BER_CLASS_CON, 40, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariable_impl }, + { BER_CLASS_CON, 45, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_signalingMessageEncryptionKey_impl }, + { BER_CLASS_CON, 18, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_stationClassMark_impl }, + { BER_CLASS_CON, 206, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_systemOperatorCode_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_targetCellID_impl }, + { BER_CLASS_CON, 220, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBandwidth_impl }, + { BER_CLASS_CON, 31, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBurstIndicator_impl }, + { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaCallMode_impl }, + { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaChannelData_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { BER_CLASS_CON, 179, BER_FLAGS_OPTIONAL, dissect_tdmaTerminalCapability }, + { BER_CLASS_CON, 180, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaVoiceCoder_impl }, + { BER_CLASS_CON, 47, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminalType_impl }, + { BER_CLASS_CON, 48, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voicePrivacyMask_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &num_rssi); +static int +dissect_ansi_map_HandoffBack2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + HandoffBack2_set, hf_index, ett_ansi_map_HandoffBack2); + + return offset; +} + + +static const ber_sequence_t HandoffBack2Res_set[] = { + { BER_CLASS_CON, 198, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_bsmcstatus_impl }, + { BER_CLASS_CON, 357, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdma2000HandoffResponseIOSData_impl }, + { BER_CLASS_CON, 63, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaChannelData_impl }, + { BER_CLASS_CON, 132, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaCodeChannelList_impl }, + { BER_CLASS_CON, 230, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaSearchParameters_impl }, + { BER_CLASS_CON, 212, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaConnectionReferenceList_impl }, + { BER_CLASS_CON, 69, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaSearchWindow_impl }, + { BER_CLASS_CON, 174, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceConfigurationRecord_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_channelData_impl }, + { BER_CLASS_CON, 39, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_confidentialityModes_impl }, + { BER_CLASS_CON, 74, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nampsChannelData_impl }, + { BER_CLASS_CON, 205, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sOCStatus_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_targetCellID_impl }, + { BER_CLASS_CON, 31, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBurstIndicator_impl }, + { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaChannelData_impl }, + { BER_CLASS_CON, 180, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaVoiceCoder_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Number of RSSI %u", - num_rssi); +static int +dissect_ansi_map_HandoffBack2Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + HandoffBack2Res_set, hf_index, ett_ansi_map_HandoffBack2Res); - for (j = 0; j < num_rssi; j++) - { - if ((len - (asn1->offset - orig_offset)) < 3) - { - proto_tree_add_text(tree, asn1->tvb, - asn1->offset, len - (asn1->offset - orig_offset), - "Short Data (?)"); - - asn1->offset += len - (asn1->offset - orig_offset); - return; - } - - dump_rssi(asn1, tree, ""); - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 2, &value); - - other_decode_bitfield_value(bigbuf, value >> 8, 0xff, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, 1, - "%s : Measured Channel (MSB), %u", - bigbuf, - (value & 0xffe0) >> 5); - - other_decode_bitfield_value(bigbuf, value & 0xff, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset+1, 1, - "%s : Measured Channel (LSB)", - bigbuf); - } - } + return offset; +} - EXTRANEOUS_DATA_CHECK((len - (asn1->offset - orig_offset)), 0); + +static const ber_sequence_t TargetCellIDList_sequence[] = { + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_targetCellID_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_targetCellID1_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_TargetCellIDList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + TargetCellIDList_sequence, hf_index, ett_ansi_map_TargetCellIDList); + + return offset; +} +static int dissect_targetCellIDList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TargetCellIDList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_targetCellIDList); } -static void -param_tdma_maho_req(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); +static const ber_sequence_t HandoffMeasurementRequest_set[] = { + { BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_channelData_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 18, BER_FLAGS_IMPLTAG, dissect_stationClassMark_impl }, + { BER_CLASS_CON, 207, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_targetCellIDList_impl }, + { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaCallMode_impl }, + { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaChannelData_impl }, + { BER_CLASS_CON, 179, BER_FLAGS_OPTIONAL, dissect_tdmaTerminalCapability }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_HandoffMeasurementRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + HandoffMeasurementRequest_set, hf_index, ett_ansi_map_HandoffMeasurementRequest); + + return offset; +} + + +static const value_string ansi_map_SignalQuality_vals[] = { + { 0, "not-a-usable-signal" }, + { 1, "treat-as-Not-a-usable-signal" }, + { 2, "treat-as-Not-a-usable-signal" }, + { 3, "treat-as-Not-a-usable-signal" }, + { 4, "treat-as-Not-a-usable-signal" }, + { 5, "treat-as-Not-a-usable-signal" }, + { 6, "treat-as-Not-a-usable-signal" }, + { 7, "treat-as-Not-a-usable-signal" }, + { 8, "treat-as-Not-a-usable-signal" }, + { 9, "usable-signal-range" }, + { 245, "usable-signal-range" }, + { 246, "treat-the-same-as-interference" }, + { 247, "treat-the-same-as-interference" }, + { 248, "treat-the-same-as-interference" }, + { 249, "treat-the-same-as-interference" }, + { 250, "treat-the-same-as-interference" }, + { 251, "treat-the-same-as-interference" }, + { 252, "treat-the-same-as-interference" }, + { 253, "treat-the-same-as-interference" }, + { 254, "treat-the-same-as-interference" }, + { 255, "interference" }, + { 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "No MAHO information requested"; break; - case 1: str = "MAHO information requested"; break; - default: - str = "Reserved, treat as No MAHO information requested"; - break; - } +static int +dissect_ansi_map_SignalQuality(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); + return offset; +} +static int dissect_signalQuality_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SignalQuality(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_signalQuality); } -static void -param_sm_gap_int(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static const ber_sequence_t HandoffMeasurementRequestRes_set[] = { + { BER_CLASS_CON, 11, BER_FLAGS_IMPLTAG, dissect_signalQuality_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_targetCellID_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_HandoffMeasurementRequestRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + HandoffMeasurementRequestRes_set, hf_index, ett_ansi_map_HandoffMeasurementRequestRes); + + return offset; +} + + +static const ber_sequence_t HandoffMeasurementRequest2_set[] = { + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 62, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaCallMode_impl }, + { BER_CLASS_CON, 63, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaChannelData_impl }, + { BER_CLASS_CON, 174, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceConfigurationRecord_impl }, + { BER_CLASS_CON, 60, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServingOneWayDelay_impl }, + { BER_CLASS_CON, 59, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaStationClassMark_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_channelData_impl }, + { BER_CLASS_CON, 70, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_msLocation_impl }, + { BER_CLASS_CON, 165, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nampsCallMode_impl }, + { BER_CLASS_CON, 74, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nampsChannelData_impl }, + { BER_CLASS_CON, 18, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_stationClassMark_impl }, + { BER_CLASS_CON, 207, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_targetCellIDList_impl }, + { BER_CLASS_CON, 220, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBandwidth_impl }, + { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaCallMode_impl }, + { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaChannelData_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { BER_CLASS_CON, 179, BER_FLAGS_OPTIONAL, dissect_tdmaTerminalCapability }, + { 0, 0, 0, NULL } +}; - switch (value) - { - case 0: str = "Remove gap control"; break; - case 1: str = "0 seconds"; break; - case 2: str = "0.10 seconds"; break; - case 3: str = "0.25 seconds"; break; - case 4: str = "0.50 seconds"; break; - case 5: str = "1 second"; break; - case 6: str = "2 seconds"; break; - case 7: str = "5 seconds"; break; - case 8: str = "10 seconds"; break; - case 9: str = "15 seconds"; break; - case 10: str = "30 seconds"; break; - case 11: str = "60 seconds"; break; - case 12: str = "120 seconds"; break; - case 13: str = "300 seconds"; break; - case 14: str = "600 seconds"; break; - case 15: str = "Stop all queries"; break; - default: - str = "Reserved, treat as Remove gap control"; - break; - } +static int +dissect_ansi_map_HandoffMeasurementRequest2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + HandoffMeasurementRequest2_set, hf_index, ett_ansi_map_HandoffMeasurementRequest2); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); + return offset; } -static void -param_mob_cap(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset, i; - const gchar *str = NULL; - for (i=0; i < len; i++) - { - saved_offset = asn1->offset; +static const ber_sequence_t TargetMeasurementInformation_sequence[] = { + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_targetCellID_impl }, + { BER_CLASS_CON, 11, BER_FLAGS_IMPLTAG, dissect_signalQuality_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_TargetMeasurementInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + TargetMeasurementInformation_sequence, hf_index, ett_ansi_map_TargetMeasurementInformation); - switch (value) - { - case 0: str = "Undefined Mobile Position Capabilities"; break; - case 1: str = "CDMA None"; break; - case 2: str = "CDMA Pilot Phase + GPS - MS shall be capable of supporting A-FLT and GPS for position determination"; break; - case 3: str = "CDMA Pilot Phase Only - MS shall be capable of supporting A-FLT only for position determination"; break; - case 4: str = "CDMA GPS Only - MS shall be capable of supporting GPS only for position determination"; break; - case 51: str = "TDMA None. See TIA/EIA-136-740"; break; - case 52: str = "TDMA MS-Based with Network Assistance SAMPS Supported. See TIA/EIA-136-740"; break; - case 53: str = "TDMA MS-Assisted SAMPS Supported. See TIA/EIA-136-740"; break; - case 54: str = "TDMA SAMPS Time Measurement Capability Supported. See TIA/EIA-136-740"; break; - case 55: str = "TDMA MS-Based Stand-alone SAMPS Supported. See TIA/EIA-136-740"; break; - case 101: str = "AMPS None"; break; - case 102: str = "AMPS MS-based - MS shall be capable of autonomously determining the position without assistance from the network"; break; - case 103: str = "AMPS assisted GPS - MS shall be capable of utilizing network assistance in providing GPS satellite measurements for position determination in the network or of utilizing network assistance in position determination in the MS"; break; - default: - if ((value >= 5) && (value <= 50)) { str = "Reserved for CDMA, treat as CDMA None"; } - else if ((value >= 56) && (value <= 100)) { str = "Reserved for TDMA, treat as TDMA None"; } - else if ((value >= 104) && (value <= 150)) { str = "Reserved for AMPS, treat as AMPS None"; } - else if ((value >= 151) && (value <= 223)) { str = "Reserved, treat as Undefined"; } - else { str = "Reserved for protocol extension, treat as Undefined"; } - break; - } + return offset; +} +static int dissect_TargetMeasurementList_item_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TargetMeasurementInformation(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_TargetMeasurementList_item); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Mobile Position Capability, %s", - str); - } + +static const ber_sequence_t TargetMeasurementList_sequence_of[1] = { + { BER_CLASS_CON, 157, BER_FLAGS_IMPLTAG, dissect_TargetMeasurementList_item_impl }, +}; + +static int +dissect_ansi_map_TargetMeasurementList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + TargetMeasurementList_sequence_of, hf_index, ett_ansi_map_TargetMeasurementList); + + return offset; +} +static int dissect_targetMeasurementList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TargetMeasurementList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_targetMeasurementList); } -static void -param_cdma_psmm_count(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - EXACT_DATA_CHECK(len, 1); +static const ber_sequence_t HandoffMeasurementRequest2Res_set[] = { + { BER_CLASS_CON, 134, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaTargetMeasurementList_impl }, + { BER_CLASS_CON, 157, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_targetMeasurementList_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_HandoffMeasurementRequest2Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + HandoffMeasurementRequest2Res_set, hf_index, ett_ansi_map_HandoffMeasurementRequest2Res); + + return offset; +} + + +static const ber_sequence_t HandoffToThird_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_interSwitchCount_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 197, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_baseStationManufacturerCode_impl }, + { BER_CLASS_CON, 18, BER_FLAGS_IMPLTAG, dissect_stationClassMark_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_targetCellID_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_channelData_impl }, + { BER_CLASS_CON, 39, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_confidentialityModes_impl }, + { BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_handoffReason_impl }, + { BER_CLASS_CON, 164, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_handoffState_impl }, + { BER_CLASS_CON, 45, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_signalingMessageEncryptionKey_impl }, + { BER_CLASS_CON, 31, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBurstIndicator_impl }, + { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaCallMode_impl }, + { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaChannelData_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { BER_CLASS_CON, 179, BER_FLAGS_OPTIONAL, dissect_tdmaTerminalCapability }, + { BER_CLASS_CON, 180, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaVoiceCoder_impl }, + { BER_CLASS_CON, 47, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminalType_impl }, + { BER_CLASS_CON, 48, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voicePrivacyMask_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_HandoffToThird(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + HandoffToThird_set, hf_index, ett_ansi_map_HandoffToThird); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Number of CDMA Pilot Strength Measurements to return, %u", - value); + return offset; } -static void -param_cdma_sowd2(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - SHORT_DATA_CHECK(len, 5); +static const ber_sequence_t HandoffToThirdRes_set[] = { + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_channelData_impl }, + { BER_CLASS_CON, 39, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_confidentialityModes_impl }, + { BER_CLASS_CON, 31, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBurstIndicator_impl }, + { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaChannelData_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_HandoffToThirdRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + HandoffToThirdRes_set, hf_index, ett_ansi_map_HandoffToThirdRes); + + return offset; +} + + +static const ber_sequence_t HandoffToThird2_set[] = { + { BER_CLASS_CON, 198, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_bsmcstatus_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_interSwitchCount_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_targetCellID_impl }, + { BER_CLASS_CON, 356, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdma2000HandoffInvokeIOSData_impl }, + { BER_CLASS_CON, 62, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaCallMode_impl }, + { BER_CLASS_CON, 63, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaChannelData_impl }, + { BER_CLASS_CON, 212, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaConnectionReferenceList_impl }, + { BER_CLASS_CON, 351, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaMSMeasuredChannelIdentity_impl }, + { BER_CLASS_CON, 66, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaMobileProtocolRevision_impl }, + { BER_CLASS_CON, 67, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaPrivateLongCodeMask_impl }, + { BER_CLASS_CON, 174, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceConfigurationRecord_impl }, + { BER_CLASS_CON, 176, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOptionList_impl }, + { BER_CLASS_CON, 60, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServingOneWayDelay_impl }, + { BER_CLASS_CON, 59, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaStationClassMark_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaStationClassMark2_impl }, + { BER_CLASS_CON, 136, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaTargetMAHOList_impl }, + { BER_CLASS_CON, 134, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaTargetMeasurementList_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_channelData_impl }, + { BER_CLASS_CON, 39, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_confidentialityModes_impl }, + { BER_CLASS_CON, 215, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataKey_impl }, + { BER_CLASS_CON, 216, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataPrivacyParameters_impl }, + { BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_handoffReason_impl }, + { BER_CLASS_CON, 217, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ilspInformation_impl }, + { BER_CLASS_CON, 70, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_msLocation_impl }, + { BER_CLASS_CON, 165, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nampsCallMode_impl }, + { BER_CLASS_CON, 74, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nampsChannelData_impl }, + { BER_CLASS_CON, 349, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pdsnAddress_impl }, + { BER_CLASS_CON, 350, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pdsnProtocolType_impl }, + { BER_CLASS_CON, 348, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_qosPriority_impl }, + { BER_CLASS_CON, 40, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariable_impl }, + { BER_CLASS_CON, 205, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sOCStatus_impl }, + { BER_CLASS_CON, 45, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_signalingMessageEncryptionKey_impl }, + { BER_CLASS_CON, 18, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_stationClassMark_impl }, + { BER_CLASS_CON, 220, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBandwidth_impl }, + { BER_CLASS_CON, 31, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBurstIndicator_impl }, + { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaCallMode_impl }, + { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaChannelData_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { BER_CLASS_CON, 179, BER_FLAGS_OPTIONAL, dissect_tdmaTerminalCapability }, + { BER_CLASS_CON, 180, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaVoiceCoder_impl }, + { BER_CLASS_CON, 209, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_userZoneData_impl }, + { BER_CLASS_CON, 48, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voicePrivacyMask_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 2, &value); +static int +dissect_ansi_map_HandoffToThird2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + HandoffToThird2_set, hf_index, ett_ansi_map_HandoffToThird2); + + return offset; +} + + +static const ber_sequence_t HandoffToThird2Res_set[] = { + { BER_CLASS_CON, 357, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdma2000HandoffResponseIOSData_impl }, + { BER_CLASS_CON, 63, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaChannelData_impl }, + { BER_CLASS_CON, 132, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaCodeChannelList_impl }, + { BER_CLASS_CON, 212, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaConnectionReferenceList_impl }, + { BER_CLASS_CON, 230, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaSearchParameters_impl }, + { BER_CLASS_CON, 69, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaSearchWindow_impl }, + { BER_CLASS_CON, 174, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceConfigurationRecord_impl }, + { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_channelData_impl }, + { BER_CLASS_CON, 39, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_confidentialityModes_impl }, + { BER_CLASS_CON, 74, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nampsChannelData_impl }, + { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_targetCellID_impl }, + { BER_CLASS_CON, 31, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBurstIndicator_impl }, + { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaChannelData_impl }, + { BER_CLASS_CON, 180, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaVoiceCoder_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "CDMA Serving One Way Delay, %u", - value); +static int +dissect_ansi_map_HandoffToThird2Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + HandoffToThird2Res_set, hf_index, ett_ansi_map_HandoffToThird2Res); + + return offset; +} + + +static const ber_sequence_t InformationDirective_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 75, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertCode_impl }, + { BER_CLASS_CON, 130, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_announcementList_impl }, + { BER_CLASS_CON, 82, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString1_impl }, + { BER_CLASS_CON, 83, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 299, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText2_impl }, + { BER_CLASS_CON, 101, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberString_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_InformationDirective(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + InformationDirective_set, hf_index, ett_ansi_map_InformationDirective); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} - other_decode_bitfield_value(bigbuf, value, 0xfc, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - switch (value & 0x03) - { - case 0: str = "100 nsec"; break; - case 1: str = "50 nsec"; break; - case 2: str = "1/16 CDMA PN Chip"; break; - case 3: str = "Reserved"; break; - } - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Resolution, %s", - bigbuf, - str); +static int +dissect_ansi_map_AlertResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - saved_offset = asn1->offset; + return offset; +} +static int dissect_alertResult_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AlertResult(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_alertResult); +} - asn1_int32_value_decode(asn1, 2, &value); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Serving One Way Delay TimeStamp, %u", - value); +static const ber_sequence_t InformationDirectiveRes_set[] = { + { BER_CLASS_CON, 129, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertResult_impl }, + { 0, 0, 0, NULL } +}; - EXTRANEOUS_DATA_CHECK(len, 5); +static int +dissect_ansi_map_InformationDirectiveRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + InformationDirectiveRes_set, hf_index, ett_ansi_map_InformationDirectiveRes); + + return offset; } -static void -param_sms_charge_ind(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_MessageWaitingNotificationCount(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 176 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_messagewaitingnotificationcount(parameter_tvb,pinfo,tree); + } - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "No charge"; break; - case 2: str = "Charge original originator"; break; - case 3: str = "Charge original destination"; break; - default: - str = "Reserved"; - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Charge %u, %s", - value, - str); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_messageWaitingNotificationCount_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_MessageWaitingNotificationCount(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_messageWaitingNotificationCount); } -static void -param_auth_per(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 2); - saved_offset = asn1->offset; +static int +dissect_ansi_map_MessageWaitingNotificationType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 184 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_messagewaitingnotificationtype(parameter_tvb,pinfo,tree); + } - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Per call"; break; - case 2: str = "Hours"; break; - case 3: str = "Days"; break; - case 4: str = "Weeks"; break; - case 5: str = "Per agreement"; break; - case 6: str = "Indefinite"; break; - case 7: str = "Number of calls"; break; - default: - if ((value >= 8) && (value <= 223)) { str = "Reserved, treat as Per call"; } - else { str = "Reserved for protocol extension, treat as Per call"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Period (%u) %s", - value, - str); - saved_offset = asn1->offset; + return offset; +} +static int dissect_messageWaitingNotificationType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_MessageWaitingNotificationType(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_messageWaitingNotificationType); +} - asn1_int32_value_decode(asn1, 1, &value); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Value %u", - value); -} +static const ber_sequence_t InformationForward_set[] = { + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 75, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertCode_impl }, + { BER_CLASS_CON, 130, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_announcementList_impl }, + { BER_CLASS_CON, 82, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString1_impl }, + { BER_CLASS_CON, 83, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 299, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText2_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 92, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_messageWaitingNotificationCount_impl }, + { BER_CLASS_CON, 289, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_messageWaitingNotificationType_impl }, + { BER_CLASS_CON, 101, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberString_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { 0, 0, 0, NULL } +}; -static void -param_ctrl_chan_mode(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +static int +dissect_ansi_map_InformationForward(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + InformationForward_set, hf_index, ett_ansi_map_InformationForward); - saved_offset = asn1->offset; + return offset; +} - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Unknown"; break; - case 1: str = "MS is in Analog CC Mode"; break; - case 2: str = "MS is in Digital CC Mode"; break; - case 3: str = "MS is in NAMPS CC Mode"; break; - default: - if ((value >= 4) && (value <= 223)) { str = "Reserved, treat as Unknown"; } - else { str = "Reserved for protocol extension, treat as Unknown"; } - break; - } +static const ber_sequence_t InformationForwardRes_set[] = { + { BER_CLASS_CON, 129, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertResult_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static int +dissect_ansi_map_InformationForwardRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + InformationForwardRes_set, hf_index, ett_ansi_map_InformationForwardRes); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; } -static void -param_tdma_data_mode(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - SHORT_DATA_CHECK(len, 2); +static const ber_sequence_t InterSystemAnswer_set[] = { + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_InterSystemAnswer(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + InterSystemAnswer_set, hf_index, ett_ansi_map_InterSystemAnswer); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} - switch ((value & 0xe0) >> 5) - { - case 0: str = "As per IS-135"; break; - case 1: str = "As per FSVS - 211 (STU-III)"; break; - default: - str = "Reserved"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Data Part, %s", - bigbuf, - str); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : AD, %s", - bigbuf, - (value & 0x10) ? "unacknowledged data only" : "unacked data or both"); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, - (value & 0x08) ? "SAP 0 and 1" : "SAP 0 only"); - - switch (value & 0x07) - { - case 0: str = "No Data Privacy"; break; - case 1: str = "Data Privacy Algorithm A"; break; - default: - str = "Reserved, treat as No Data Privacy"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x07, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Data Privacy Mode, %s", - bigbuf, - str); +static int +dissect_ansi_map_CDMASlotCycleIndex(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_cdmaSlotCycleIndex_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CDMASlotCycleIndex(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cdmaSlotCycleIndex); +} - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - switch ((value & 0x0c) >> 2) - { - case 0: str = "RLP1"; break; - case 1: str = "RLP2"; break; - default: - str = "Reserved"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x0c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, - str); +static int +dissect_ansi_map_ExtendedMSCID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 145 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_extendedmscid(parameter_tvb,pinfo,tree); + } - switch (value & 0x03) - { - case 0: str = "16-bit Cyclic Redundancy Check"; break; - case 1: str = "24-bit Cyclic Redundancy Check"; break; - case 2: str = "No Cyclic Redundancy Check"; break; - default: - str = "Reserved"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, - str); - EXTRANEOUS_DATA_CHECK(len, 2); + return offset; +} +static int dissect_extendedMSCID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ExtendedMSCID(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_extendedMSCID); } -static void -param_tdma_voice_mode(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_ExtendedSystemMyTypeCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 153 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_extendedsystemmytypecode(parameter_tvb,pinfo,tree); + } - switch ((value & 0xf0) >> 4) - { - case 0: str = "No Voice Privacy"; break; - case 1: str = "Voice Privacy Algorithm A"; break; - case 2: str = "Reserved, treat as No Voice Privacy"; break; - case 3: str = "Reserved, treat as No Voice Privacy"; break; - case 4: str = "Reserved for SOC/BMSC Specific signaling"; break; - default: - str = "Reserved, treat as No Voice Privacy"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Voice Privacy Mode, %s", - bigbuf, - str); + return offset; +} +static int dissect_extendedSystemMyTypeCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ExtendedSystemMyTypeCode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_extendedSystemMyTypeCode); +} + - switch (value & 0x0f) - { - case 0: str = "No Voice Coder"; break; - case 1: str = "VSELP Voice Coder"; break; - case 2: str = "IS-641 Voice Coder"; break; - case 6: str = "Reserved for SOC/BMSC Specific signaling"; break; - default: - str = "Reserved, treat as No Voice Coder"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x0f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Voice Coder, %s", - bigbuf, - str); +static int +dissect_ansi_map_MSIDUsage(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_mSIDUsage_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_MSIDUsage(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_mSIDUsage); } -static void -param_tdma_bandwidth(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_NetworkTMSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); + return offset; +} +static int dissect_networkTMSI_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_NetworkTMSI(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_networkTMSI); +} - switch (value & 0x0f) - { - case 0: str = "Half-Rate Digital Traffic Channel Only"; break; - case 1: str = "Full-Rate Digital Traffic Channel Only"; break; - case 2: str = "Half-Rate or Full-rate Digital Traffic Channel - Full-Rate Preferred"; break; - case 3: str = "Half-rate or Full-rate Digital Traffic Channel - Half-rate Preferred"; break; - case 4: str = "Double Full-Rate Digital Traffic Channel Only"; break; - case 5: str = "Triple Full-Rate Digital Traffic Channel Only"; break; - default: - str = "Reserved, treat as Full-Rate Digital Traffic Channel Only"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x0f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Bandwidth, %s", - bigbuf, - str); - EXTRANEOUS_DATA_CHECK(len, 1); -} +static int +dissect_ansi_map_PageCount(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); -static void -param_change_srvc_attr(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; + return offset; +} +static int dissect_pageCount_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PageCount(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_pageCount); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - other_decode_bitfield_value(bigbuf, value, 0xf0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +static int +dissect_ansi_map_PageIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - switch ((value & 0x0c) >> 2) - { - case 0: str = "Service Negotiation Used"; break; - case 1: str = "Service Negotiation Not Used"; break; - case 2: str = "Service Negotiation Required"; break; - case 3: str = "Service Negotiation Not Required"; break; - } + return offset; +} +static int dissect_pageIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PageIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_pageIndicator); +} - other_decode_bitfield_value(bigbuf, value, 0x0c, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Service Negotiate Flag (SRVNEG), %s", - bigbuf, - str); - switch (value & 0x03) - { - case 0 : str = "Change Facilities Operation Requested"; break; - case 1 : str = "Change Facilities Operation Not Requested"; break; - case 2 : str = "Change Facilities Operation Used"; break; - case 3 : str = "Change Facilities Operation Not Used"; break; - } - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Change Facilities Flag (CHGFAC), %s", - bigbuf, - str); +static int +dissect_ansi_map_PageResponseTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_pageResponseTime_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PageResponseTime(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_pageResponseTime); } -static void -param_dp_params(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - SHORT_DATA_CHECK(len, 4); - saved_offset = asn1->offset; +static int +dissect_ansi_map_PilotBillingID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 257 "ansi_map.cnf" - asn1_int32_value_decode(asn1, 1, &value); + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); - other_decode_bitfield_value(bigbuf, value, 0xfc, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); + if (parameter_tvb){ + dissect_ansi_map_pilotbillingid(parameter_tvb,pinfo,tree); + } - switch (value & 0x03) - { - case 0: str = "Privacy inactive or not supported"; break; - case 1: str = "Privacy Requested or Acknowledged"; break; - default: - str = "Reserved, treat as Privacy inactive or not supported"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Privacy Mode, %s", - bigbuf, - str); - saved_offset = asn1->offset; + return offset; +} +static int dissect_pilotBillingID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PilotBillingID(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_pilotBillingID); +} - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Data Privacy Version 1"; break; - default: - if ((value >= 2) && (value <= 223)) { str = "Reserved, treat as Not used"; } - else { str = "Reserved for protocol extension, treat as Not used"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Data Privacy Version, %s", - str); +static int +dissect_ansi_map_RedirectingPartyName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_redirectingPartyName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RedirectingPartyName(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_redirectingPartyName); +} + + +static const value_string ansi_map_SystemMyTypeCode_vals[] = { + { 0, "not-used" }, + { 1, "eDS" }, + { 2, "astronet" }, + { 3, "lucent-Technologies" }, + { 4, "ericsson" }, + { 5, "gTE" }, + { 6, "motorola" }, + { 7, "nEC" }, + { 8, "nORTEL" }, + { 9, "novAtel" }, + { 10, "plexsys" }, + { 11, "digital-Equipment-Corp" }, + { 12, "iNET" }, + { 13, "bellcore" }, + { 14, "alcatel-SEL" }, + { 15, "compaq" }, + { 16, "qUALCOMM" }, + { 17, "aldiscon" }, + { 18, "celcore" }, + { 19, "tELOS" }, + { 20, "aDI-Limited" }, + { 21, "coral-Systems" }, + { 22, "synacom-Technology" }, + { 23, "dSC" }, + { 24, "mCI" }, + { 25, "newNet" }, + { 26, "sema-Group-Telecoms" }, + { 27, "lG-Information-and-Communications" }, + { 28, "cBIS" }, + { 29, "siemens" }, + { 30, "samsung-Electronics" }, + { 31, "readyCom-Inc" }, + { 32, "aG-Communication-Systems" }, + { 33, "hughes-Network-Systems" }, + { 34, "phoenix-Wireless-Group" }, + { 0, NULL } +}; - saved_offset = asn1->offset; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len - 2, - "Data Privacy data"); +static int +dissect_ansi_map_SystemMyTypeCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1->offset += (len - 2); + return offset; +} +static int dissect_systemMyTypeCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SystemMyTypeCode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_systemMyTypeCode); } -static void -param_trn(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - guint saved_offset; - guchar *poctets; - saved_offset = asn1->offset; - asn1_string_value_decode(asn1, len, &poctets); +static int +dissect_ansi_map_TDMADataFeaturesIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_tdmaDataFeaturesIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TDMADataFeaturesIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_tdmaDataFeaturesIndicator); +} + + +static const ber_sequence_t InterSystemPage_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 75, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertCode_impl }, + { BER_CLASS_CON, 243, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyName_impl }, + { BER_CLASS_CON, 80, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits1_impl }, + { BER_CLASS_CON, 81, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits2_impl }, + { BER_CLASS_CON, 82, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString1_impl }, + { BER_CLASS_CON, 83, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 170, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaBandClass_impl }, + { BER_CLASS_CON, 66, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaMobileProtocolRevision_impl }, + { BER_CLASS_CON, 175, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption_impl }, + { BER_CLASS_CON, 176, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOptionList_impl }, + { BER_CLASS_CON, 166, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaSlotCycleIndex_impl }, + { BER_CLASS_CON, 59, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaStationClassMark_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaStationClassMark2_impl }, + { BER_CLASS_CON, 199, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_controlChannelMode_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 299, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText2_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 53, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extendedMSCID_impl }, + { BER_CLASS_CON, 54, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extendedSystemMyTypeCode_impl }, + { BER_CLASS_CON, 242, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 288, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_legInformation_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 327, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSIDUsage_impl }, + { BER_CLASS_CON, 233, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_networkTMSI_impl }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 300, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pageCount_impl }, + { BER_CLASS_CON, 71, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pageIndicator_impl }, + { BER_CLASS_CON, 301, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pageResponseTime_impl }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 169, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotBillingID_impl }, + { BER_CLASS_CON, 168, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotNumber_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 101, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberString_impl }, + { BER_CLASS_CON, 245, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingPartyName_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { BER_CLASS_CON, 221, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaDataFeaturesIndicator_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { BER_CLASS_CON, 47, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminalType_impl }, + { BER_CLASS_CON, 121, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTreatment_impl }, + { BER_CLASS_CON, 122, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTriggers_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { 0, 0, 0, NULL } +}; - my_dgt_tbcd_unpack(bigbuf, poctets, len, &Dgt_msid); - g_free(poctets); +static int +dissect_ansi_map_InterSystemPage(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + InterSystemPage_set, hf_index, ett_ansi_map_InterSystemPage); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len, "TRN %s", bigbuf); + return offset; } -static void -param_islp_info(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; +static const value_string ansi_map_ConditionallyDeniedReason_vals[] = { + { 0, "not-used" }, + { 1, "waitable" }, + { 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "No ISLP supported"; break; - case 1: str = "ISLP supported (see ISLP)"; break; - default: - if ((value >= 2) && (value <= 112)) { str = "Reserved, treat as No ISLP supported"; } - else if ((value >= 113) && (value <= 223)) { str = "Reserved, treat as ISLP supported"; } - else if ((value >= 224) && (value <= 240)) { str = "Reserved for protocol extension, treat as No ISLP supported"; } - else { str = "Reserved for protocol extension, treat as ISLP supported"; } - break; - } +static int +dissect_ansi_map_ConditionallyDeniedReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_conditionallyDeniedReason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ConditionallyDeniedReason(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_conditionallyDeniedReason); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); - EXTRANEOUS_DATA_CHECK(len, 1); +static const ber_sequence_t InterSystemPageRes_set[] = { + { BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_accessDeniedReason_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 175, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption_impl }, + { BER_CLASS_CON, 162, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_conditionallyDeniedReason_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 53, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extendedMSCID_impl }, + { BER_CLASS_CON, 54, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extendedSystemMyTypeCode_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_InterSystemPageRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + InterSystemPageRes_set, hf_index, ett_ansi_map_InterSystemPageRes); + + return offset; } -static void -param_ana_red_info(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_PagingFrameClass(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); + return offset; +} +static int dissect_pagingFrameClass_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PagingFrameClass(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_pagingFrameClass); +} - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Ignore CDMA, %s", - bigbuf, - (value & 0x20) ? "Ignore the CDMA Capability Message on the analog system to which it is being redirected" : - "Don't ignore the CDMA Capability Message on the analog system to which it is being redirected"); - switch (value & 0x1f) - { - case 0: str = "Attempt to obtain service on either System A or B in accordance with the custom system selection process"; break; - case 1: str = "Attempt to obtain service on System A only"; break; - case 2: str = "Error in IS-735, text was unspecified but not reserved"; break; - case 3: str = "Attempt to obtain service on System A first. If unsuccessful, attempt to obtain service on System B"; break; - case 4: str = "Attempt to obtain service on System B first. If unsuccessful, attempt to obtain service on System A"; break; - case 5: str = "Attempt to obtain service on either System A or System B. If unsuccessful, attempt to obtain service on the alternate system (System A or System B)"; break; - - default: - str = "Reserved for protocol extension"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x1f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Sys Ordering, %s", - bigbuf, - str); +static int +dissect_ansi_map_PSID_RSIDInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_pSID_RSIDInformation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PSID_RSIDInformation(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_pSID_RSIDInformation); +} +static int dissect_pSID_RSIDInformation1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PSID_RSIDInformation(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_pSID_RSIDInformation1); } -static void -param_reason_list(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - gint i; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; +static const ber_sequence_t PSID_RSIDList_sequence[] = { + { BER_CLASS_CON, 202, BER_FLAGS_IMPLTAG, dissect_pSID_RSIDInformation_impl }, + { BER_CLASS_CON, 202, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pSID_RSIDInformation1_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_PSID_RSIDList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + PSID_RSIDList_sequence, hf_index, ett_ansi_map_PSID_RSIDList); + + return offset; +} +static int dissect_pSID_RSIDList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PSID_RSIDList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_pSID_RSIDList); +} + + +static const ber_sequence_t InterSystemPage2_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 75, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertCode_impl }, + { BER_CLASS_CON, 82, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString1_impl }, + { BER_CLASS_CON, 83, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 170, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaBandClass_impl }, + { BER_CLASS_CON, 66, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaMobileProtocolRevision_impl }, + { BER_CLASS_CON, 199, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_controlChannelMode_impl }, + { BER_CLASS_CON, 175, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption_impl }, + { BER_CLASS_CON, 176, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOptionList_impl }, + { BER_CLASS_CON, 166, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaSlotCycleIndex_impl }, + { BER_CLASS_CON, 59, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaStationClassMark_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaStationClassMark2_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 299, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText2_impl }, + { BER_CLASS_CON, 242, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 327, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSIDUsage_impl }, + { BER_CLASS_CON, 233, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_networkTMSI_impl }, + { BER_CLASS_CON, 200, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nonPublicData_impl }, + { BER_CLASS_CON, 300, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pageCount_impl }, + { BER_CLASS_CON, 71, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pageIndicator_impl }, + { BER_CLASS_CON, 210, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pagingFrameClass_impl }, + { BER_CLASS_CON, 301, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pageResponseTime_impl }, + { BER_CLASS_CON, 203, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pSID_RSIDList_impl }, + { BER_CLASS_CON, 101, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberString_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 221, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaDataFeaturesIndicator_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { BER_CLASS_CON, 47, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminalType_impl }, + { BER_CLASS_CON, 209, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_userZoneData_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_InterSystemPage2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + InterSystemPage2_set, hf_index, ett_ansi_map_InterSystemPage2); - i = 0; + return offset; +} - do - { - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Unknown"; break; - case 1: str = "Unable to configure ISLP"; break; - case 2: str = "ISLP failure"; break; - case 3: str = "Service allowed but facilities not available"; break; - case 4: str = "Service not allowed"; break; - case 5: str = "No Response to TMSI assignment"; break; - case 6: str = "Required parameters unavailable. (e.g., as indicated by the RequiredParametersMask parameter)"; break; - default: - if ((value >= 7) && (value <= 110)) { str = "Reserved for common CDMA and TDMA network error causes. If unknown, treat as Unknown"; } - else if ((value >= 111) && (value <= 127)) { str = "Reserved for common CDMA and TDMA network error causes for protocol extension. If unknown, treat as Unknown"; } - else if ((value >= 128) && (value <= 174)) { str = "CDMA Specific error causes. If unknown, treat as Unknown"; } - else if ((value >= 175) && (value <= 191)) { str = "CDMA Specific error causes for protocol extension. If unknown treat as Unknown"; } - else if ((value >= 192) && (value <= 237)) { str = "TDMA Specific error causes as defined by the TDMACause parameter. If unknown treat as Unknown"; } - else { str = "TDMA Specific error causes for protocol extension. If unknown, treat as Unknown"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "[%u] %s", - i++, - str); +static int +dissect_ansi_map_RANDC(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - saved_offset = asn1->offset; - } - while ((len - i) > 0); + return offset; +} +static int dissect_randc_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RANDC(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_randc); } -static void -param_imsi(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) -{ - guint saved_offset; - guchar *poctets; - saved_offset = asn1->offset; - asn1_string_value_decode(asn1, len, &poctets); - my_dgt_tbcd_unpack(bigbuf, poctets, len, &Dgt_msid); - g_free(poctets); +static int +dissect_ansi_map_TDMADataMode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_tdmaDataMode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TDMADataMode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_tdmaDataMode); +} + + +static const ber_sequence_t InterSystemPage2Res_set[] = { + { BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_accessDeniedReason_impl }, + { BER_CLASS_CON, 36, BER_FLAGS_IMPLTAG, dissect_authenticationResponseBaseStation_impl }, + { BER_CLASS_CON, 38, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callHistoryCount_impl }, + { BER_CLASS_CON, 175, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption_impl }, + { BER_CLASS_CON, 67, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randc_impl }, + { BER_CLASS_CON, 41, BER_FLAGS_IMPLTAG, dissect_randomVariableBaseStation_impl }, + { BER_CLASS_CON, 34, BER_FLAGS_IMPLTAG, dissect_systemAccessType_impl }, + { BER_CLASS_CON, 49, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_systemCapabilities_impl }, + { BER_CLASS_CON, 222, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaDataMode_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { BER_CLASS_CON, 47, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminalType_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len, - "IMSI %s", - bigbuf); +static int +dissect_ansi_map_InterSystemPage2Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + InterSystemPage2Res_set, hf_index, ett_ansi_map_InterSystemPage2Res); - g_snprintf(add_string, string_len, " - %s", bigbuf); + return offset; } -static void -param_min_basic(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len, gboolean true_min) -{ - guint saved_offset; - guchar *poctets; - - EXACT_DATA_CHECK(len, 5); - saved_offset = asn1->offset; - asn1_string_value_decode(asn1, len, &poctets); - my_dgt_tbcd_unpack(bigbuf, poctets, len, &Dgt_msid); - g_free(poctets); +static int +dissect_ansi_map_ChangeServiceAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_changeServiceAttributes_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ChangeServiceAttributes(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_changeServiceAttributes); +} + + +static const ber_sequence_t InterSystemSetup_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 75, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertCode_impl }, + { BER_CLASS_CON, 82, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString1_impl }, + { BER_CLASS_CON, 83, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 67, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaPrivateLongCodeMask_impl }, + { BER_CLASS_CON, 175, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption_impl }, + { BER_CLASS_CON, 176, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOptionList_impl }, + { BER_CLASS_CON, 214, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_changeServiceAttributes_impl }, + { BER_CLASS_CON, 215, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataKey_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 299, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText2_impl }, + { BER_CLASS_CON, 242, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 217, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ilspInformation_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 101, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberString_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_edirectingSubaddress_impl }, + { BER_CLASS_CON, 45, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_signalingMessageEncryptionKey_impl }, + { BER_CLASS_CON, 48, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voicePrivacyMask_impl }, + { 0, 0, 0, NULL } +}; - if (true_min) - { - proto_tree_add_string_format(tree, hf_ansi_map_min, asn1->tvb, - saved_offset, len, - bigbuf, - "MIN %s", - bigbuf); - } - else - { - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len, - "MIN %s", - bigbuf); - } +static int +dissect_ansi_map_InterSystemSetup(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + InterSystemSetup_set, hf_index, ett_ansi_map_InterSystemSetup); - g_snprintf(add_string, string_len, " - %s", bigbuf); + return offset; } -static void -param_ms_min(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) -{ - param_min_basic(asn1, tree, len, add_string, string_len, FALSE); -} -static void -param_new_min(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) -{ - param_min_basic(asn1, tree, len, add_string, string_len, FALSE); -} -static void -param_min(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) -{ - param_min_basic(asn1, tree, len, add_string, string_len, TRUE); +static int +dissect_ansi_map_SetupResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_setupResult_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SetupResult(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_setupResult); } -static void -param_auth_cap(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); +static const ber_sequence_t InterSystemSetupRes_set[] = { + { BER_CLASS_CON, 212, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaConnectionReferenceList_impl }, + { BER_CLASS_CON, 175, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption_impl }, + { BER_CLASS_CON, 217, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ilspInformation_impl }, + { BER_CLASS_CON, 151, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_setupResult_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_InterSystemSetupRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + InterSystemSetupRes_set, hf_index, ett_ansi_map_InterSystemSetupRes); + + return offset; +} - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "No authentication required"; break; - case 2: str = "Authentication required"; break; - case 128: str = "Authentication required and UIM capable"; break; - default: - if ((value >= 3) && (value <= 95)) { str = "Reserved, treat as No authentication required"; } - else if ((value >= 96) && (value <= 127)) { str = "Reserved for protocol extension, treat as No authentication required"; } - else if ((value >= 129) && (value <= 223)) { str = "Reserved, treat as Authentication required"; } - else { str = "Reserved for protocol extension, treat as Authentication required"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static int +dissect_ansi_map_TerminationAccessType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_terminationAccessType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TerminationAccessType(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_terminationAccessType); } -static void -param_sus_acc(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_TriggerCapability(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 321 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_triggercapability(parameter_tvb,pinfo,tree); + } - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Anomalous digits"; break; - case 2: str = "Unspecified"; break; - default: - if ((value >= 3) && (value <= 113)) { str = "Reserved, treat as Anomalous digits"; } - else if ((value >= 114) && (value <= 223)) { str = "Reserved, treat as Unspecified"; } - else { str = "Reserved for protocol extension, treat as Unspecified"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Reason, %s", - str); + return offset; +} +static int dissect_triggerCapability_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TriggerCapability(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_triggerCapability); } -static void -param_dis_text(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - SHORT_DATA_CHECK(len, 3); - saved_offset = asn1->offset; +static int +dissect_ansi_map_WINOperationsCapability(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 329 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_winoperationscapability(parameter_tvb,pinfo,tree); + } + - asn1_int32_value_decode(asn1, 1, &value); - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Spec. has hardcoded 1", - bigbuf); + return offset; +} +static int dissect_wINOperationsCapability_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_WINOperationsCapability(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_wINOperationsCapability); +} - other_decode_bitfield_value(bigbuf, value, 0x7f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Display type, see ANSI T1.610 for encoding", - bigbuf); - saved_offset = asn1->offset; +static const ber_sequence_t WINCapability_set[] = { + { BER_CLASS_CON, 277, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerCapability_impl }, + { BER_CLASS_CON, 281, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_wINOperationsCapability_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len - 1, - "Display data"); +static int +dissect_ansi_map_WINCapability(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + WINCapability_set, hf_index, ett_ansi_map_WINCapability); - asn1->offset += len - 1; + return offset; +} +static int dissect_winCapability_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_WINCapability(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_winCapability); } -static void -param_dis_text2(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint orig_offset, saved_offset; - const gchar *str = NULL; - SHORT_DATA_CHECK(len, 4); - orig_offset = asn1->offset; - saved_offset = asn1->offset; +static int +dissect_ansi_map_CallingPartyCategory(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_callingPartyCategory_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CallingPartyCategory(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_callingPartyCategory); +} + + +static const ber_sequence_t LocationRequest_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { BER_CLASS_CON, 340, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_acgencountered_impl }, + { BER_CLASS_CON, 80, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits1_impl }, + { BER_CLASS_CON, 81, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 175, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 245, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingPartyName_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 119, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationAccessType_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { BER_CLASS_CON, 123, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { BER_CLASS_CON, 279, BER_FLAGS_IMPLTAG, dissect_triggerType_impl }, + { BER_CLASS_CON, 280, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_winCapability_impl }, + { BER_CLASS_CON, 355, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyCategory_impl }, + { 0, 0, 0, NULL } +}; - do - { - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_LocationRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + LocationRequest_set, hf_index, ett_ansi_map_LocationRequest); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "ASCII"; break; - case 2: str = "ITU T.50. The International Reference Alphabet as defined in ITU-R Rec. T.50"; break; - case 3: str = "User Specific"; break; - case 4: str = "ISO 8859-1. The 8-bit single-byte coded character set Latin 1 as defined in ISO/IEC Standard 8859-1"; break; - case 5: str = "ISO 10646. The Universal Multiple-Octet Coded Character Set (USC) as defined in ISO/IEC Standard 10646"; break; - case 6: str = "ISO 8859-8. The 8-bit single-byte coded character set Hebrew as defined in ISO/IEC Standard 8859-8"; break; - case 7: str = "IS-91 Extended Protocol Message. The length is determined by the Message Type; see TIA/EIA/IS-90"; break; - case 8: str = "Shift-JIS. Variable 1-2 byte nonmodal encoding for Kanji, Kana, and Latin character sets defined in JIS X0201 and JIS X0206"; break; - case 9: str = "KC C 5601. Variable 1-2 byte Korean encoding method"; break; - default: - if ((value >= 10) && (value <= 223)) { str = "Reserved, treat as ASCII"; } - else { str = "Reserved, treat as ASCII"; } - break; + return offset; +} + + + +static int +dissect_ansi_map_ControlNetworkID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 337 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_controlnetworkid(parameter_tvb,pinfo,tree); } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Display Character Set, %s", - str); - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_controlNetworkID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ControlNetworkID(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_controlNetworkID); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Display Type, %u, see ANSI T1.610", - value); - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_DMH_ServiceID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_dmh_ServiceID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DMH_ServiceID(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_dmh_ServiceID); +} + + +static const ber_sequence_t LocationRequestRes_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_accessDeniedReason_impl }, + { BER_CLASS_CON, 130, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_announcementList_impl }, + { BER_CLASS_CON, 82, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString1_impl }, + { BER_CLASS_CON, 83, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString2_impl }, + { BER_CLASS_CON, 175, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption_impl }, + { BER_CLASS_CON, 307, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_controlNetworkID_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_carrier_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_dest_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 299, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText2_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 88, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_RedirectionIndicator_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ServiceID_impl }, + { BER_CLASS_CON, 163, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_groupInformation_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 96, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_noAnswerTime_impl }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_edirectingNumberDigits_impl }, + { BER_CLASS_CON, 101, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberString_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { BER_CLASS_CON, 120, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationList_impl }, + { BER_CLASS_CON, 122, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTriggers_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Display Tag, %u", - value); +static int +dissect_ansi_map_LocationRequestRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + LocationRequestRes_set, hf_index, ett_ansi_map_LocationRequestRes); - saved_offset = asn1->offset; + return offset; +} - asn1_int32_value_decode(asn1, 1, &value); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Display Length, %u", - value); +static const value_string ansi_map_DeregistrationType_vals[] = { + { 0, "not-used" }, + { 1, "deregister-for-an-unspecified-reason" }, + { 2, "deregister-for-an-administrative-reason" }, + { 3, "deregister-due-to-MS-power-down" }, + { 0, NULL } +}; - saved_offset = asn1->offset; - if (value > 0) - { - if ((guint32) value > (len - (saved_offset - orig_offset))) - { - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len - (saved_offset - orig_offset), - "Short Data (?)"); +static int +dissect_ansi_map_DeregistrationType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1->offset += len - (saved_offset - orig_offset); - return; - } + return offset; +} +static int dissect_deregistrationType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DeregistrationType(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_deregistrationType); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, value, - "Display data"); - asn1->offset += value; - saved_offset = asn1->offset; - } - } - while ((len - (saved_offset - orig_offset)) >= 4); +static int +dissect_ansi_map_ServicesResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - EXTRANEOUS_DATA_CHECK((len - (saved_offset - orig_offset)), 0); + return offset; +} +static int dissect_servicesResult_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ServicesResult(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_servicesResult); } -static void -param_dmh_srvc_id(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint orig_offset, saved_offset; - - SHORT_DATA_CHECK(len, 5); - orig_offset = asn1->offset; - saved_offset = asn1->offset; - do - { - asn1_int32_value_decode(asn1, 2, &value); +static int +dissect_ansi_map_SMS_MessageWaitingIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_null(implicit_tag, pinfo, tree, tvb, offset, hf_index); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Market ID %u", - value); + return offset; +} +static int dissect_sms_MessageWaitingIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_MessageWaitingIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_MessageWaitingIndicator); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static const ber_sequence_t MSInactive_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_lectronicSerialNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 38, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callHistoryCount_impl }, + { BER_CLASS_CON, 73, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_deregistrationType_impl }, + { BER_CLASS_CON, 87, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_destinationDigits_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 204, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_servicesResult_impl }, + { BER_CLASS_CON, 118, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_MessageWaitingIndicator_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Market Segment ID %u", - value); +static int +dissect_ansi_map_MSInactive(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + MSInactive_set, hf_index, ett_ansi_map_MSInactive); - saved_offset = asn1->offset; + return offset; +} - asn1_int32_value_decode(asn1, 2, &value); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "DMH Service ID Value %u", - value); - saved_offset = asn1->offset; - } - while ((len - (saved_offset - orig_offset)) >= 5); +static int +dissect_ansi_map_OriginationTriggers(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 233 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_originationtriggers(parameter_tvb,pinfo,tree); + } - EXTRANEOUS_DATA_CHECK((len - (saved_offset - orig_offset)), 0); -} -static void -param_feat_ind(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint orig_offset, saved_offset; - SHORT_DATA_CHECK(len, 5); + return offset; +} +static int dissect_originationTriggers_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_OriginationTriggers(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_originationTriggers); +} - orig_offset = asn1->offset; - saved_offset = asn1->offset; - do - { - asn1_int32_value_decode(asn1, 2, &value); +static const value_string ansi_map_FeatureIndicator_vals[] = { + { 0, "not-used" }, + { 38, "user-selective-call-forwarding" }, + { 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Market ID %u", - value); - saved_offset = asn1->offset; +static int +dissect_ansi_map_FeatureIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_featureIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_FeatureIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_featureIndicator); +} + + +static const ber_sequence_t OriginationRequest_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 98, BER_FLAGS_IMPLTAG, dissect_originationTriggers_impl }, + { BER_CLASS_CON, 123, BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { BER_CLASS_CON, 340, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_acgencountered_impl }, + { BER_CLASS_CON, 243, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyName_impl }, + { BER_CLASS_CON, 80, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits1_impl }, + { BER_CLASS_CON, 81, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 175, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 306, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_featureIndicator_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { BER_CLASS_CON, 279, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerType_impl }, + { BER_CLASS_CON, 280, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_winCapability_impl }, + { BER_CLASS_CON, 355, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyCategory_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_OriginationRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + OriginationRequest_set, hf_index, ett_ansi_map_OriginationRequest); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Market Segment ID %u", - value); + return offset; +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 2, &value); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "DMH Service ID Value %u", - value); +static int +dissect_ansi_map_DMH_ChargeInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_dmh_ChargeInformation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DMH_ChargeInformation(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_dmh_ChargeInformation); +} + + +static const ber_sequence_t OriginationRequestRes_set[] = { + { BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_accessDeniedReason_impl }, + { BER_CLASS_CON, 128, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_actionCode_impl }, + { BER_CLASS_CON, 130, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_announcementList_impl }, + { BER_CLASS_CON, 82, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString1_impl }, + { BER_CLASS_CON, 83, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 299, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText2_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 311, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ChargeInformation_impl }, + { BER_CLASS_CON, 88, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_RedirectionIndicator_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ServiceID_impl }, + { BER_CLASS_CON, 163, BER_FLAGS_OPTIONAL, dissect_groupInformation }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 96, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_noAnswerTime_impl }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 168, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotNumber_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 101, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberString_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 394, BER_FLAGS_IMPLTAG, dissect_resumePIC_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 120, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationList_impl }, + { BER_CLASS_CON, 122, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTriggers_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; - } - while ((len - (saved_offset - orig_offset)) >= 5); +static int +dissect_ansi_map_OriginationRequestRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + OriginationRequestRes_set, hf_index, ett_ansi_map_OriginationRequestRes); - EXTRANEOUS_DATA_CHECK((len - (saved_offset - orig_offset)), 0); + return offset; } -static void -param_a_key_ver(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - gint i; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; +static const value_string ansi_map_QualificationInformationCode_vals[] = { + { 0, "not-used" }, + { 1, "no-information" }, + { 2, "validation-only" }, + { 3, "validation-and-profile" }, + { 4, "profile-only" }, + { 0, NULL } +}; - i = 0; - do - { - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_QualificationInformationCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_qualificationInformationCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_QualificationInformationCode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_qualificationInformationCode); +} + + +static const value_string ansi_map_AuthorizationDenied_vals[] = { + { 0, "not-used" }, + { 1, "delinquent-account" }, + { 2, "invalid-serial-number" }, + { 3, "stolen-unit" }, + { 4, "duplicate-unit" }, + { 5, "unassigned-directory-number" }, + { 6, "unspecified" }, + { 7, "multiple-access" }, + { 8, "not-Authorized-for-the-MSC" }, + { 9, "missing-authentication-parameters" }, + { 10, "terminalType-mismatch" }, + { 11, "requested-Service-Code-Not-Supported" }, + { 0, NULL } +}; - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "A-key Generation not supported"; break; - case 2: str = "Diffie Hellman with 768-bit modulus, 160-bit primitive, and 160-bit exponents"; break; - case 3: str = "Diffie Hellman with 512-bit modulus, 160-bit primitive, and 160-bit exponents"; break; - case 4: str = "Diffie Hellman with 768-bit modulus, 32-bit primitive, and 160-bit exponents"; break; - default: - if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as A-key Generation not supported"; } - else { str = "Reserved for protocol extension, treat as A-key Generation not supported"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "[%u] %s", - i++, - str); +static int +dissect_ansi_map_AuthorizationDenied(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - saved_offset = asn1->offset; - } - while ((len - i) > 0); + return offset; +} +static int dissect_authorizationDenied_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AuthorizationDenied(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_authorizationDenied); } -static void -param_inter_msg_time(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_AuthorizationPeriod(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 82 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_authorizationperiod(parameter_tvb,pinfo,tree); + } + - asn1_int32_value_decode(asn1, 1, &value); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Timer Value, %u, %u seconds", - value, - value * 10); - /* XXX * 10 or / 10 ? */ + return offset; +} +static int dissect_authorizationPeriod_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AuthorizationPeriod(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_authorizationPeriod); } -static void -param_rel_cause(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_DeniedAuthorizationPeriod(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 137 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_deniedauthorizationperiod(parameter_tvb,pinfo,tree); + } - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Unspecified"; break; - case 1: str = "Calling Party"; break; - case 2: str = "Called Party"; break; - case 3: str = "Commanded Disconnect"; break; - default: - if ((value >= 4) && (value <= 23)) { str = "Reserved, treat as Calling Party"; } - else if ((value >= 24) && (value <= 31)) { str = "Reserved for protocol extension. If unknown, treat as Calling Party"; } - else if ((value >= 32) && (value <= 55)) { str = "Reserved, treat as Called Party"; } - else if ((value >= 56) && (value <= 63)) { str = "Reserved for protocol extension. If unknown, treat as Called Party"; } - else if ((value >= 64) && (value <= 87)) { str = "Reserved, treat as Commanded Disconnect"; } - else if ((value >= 88) && (value <= 95)) { str = "Reserved for protocol extension. If unknown, treat as Commanded Disconnect"; } - else if ((value >= 96) && (value <= 223)) { str = "Reserved, treat as Unspecified"; } - else { str = "Reserved for protocol extension. If unknown, treat as Unspecified"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); + return offset; +} +static int dissect_deniedAuthorizationPeriod_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DeniedAuthorizationPeriod(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_deniedAuthorizationPeriod); } -static void -param_time_day(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - gint32 h, m, s, ts; - guint saved_offset; - EXACT_DATA_CHECK(len, 3); +static const ber_sequence_t QualificationDirective_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 17, BER_FLAGS_IMPLTAG, dissect_qualificationInformationCode_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { BER_CLASS_CON, 225, BER_FLAGS_IMPLTAG, dissect_analogRedirectRecord_impl }, + { BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authorizationDenied_impl }, + { BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authorizationPeriod_impl }, + { BER_CLASS_CON, 229, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaRedirectRecord_impl }, + { BER_CLASS_CON, 199, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_controlChannelMode_impl }, + { BER_CLASS_CON, 167, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_deniedAuthorizationPeriod_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_carrier_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_dest_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 238, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceRedirectionInfo_impl }, + { BER_CLASS_CON, 239, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_roamingIndication_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_QualificationDirective(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + QualificationDirective_set, hf_index, ett_ansi_map_QualificationDirective); + + return offset; +} + + +static const ber_sequence_t QualificationRequest_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 17, BER_FLAGS_IMPLTAG, dissect_qualificationInformationCode_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 232, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaNetworkIdentification_impl }, + { BER_CLASS_CON, 199, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_controlChannelMode_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 34, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_systemAccessType_impl }, + { BER_CLASS_CON, 47, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminalType_impl }, + { BER_CLASS_CON, 123, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { BER_CLASS_CON, 280, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_winCapability_impl }, + { BER_CLASS_CON, 200, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nonPublicData_impl }, + { BER_CLASS_CON, 209, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_userZoneData_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 3, &value); +static int +dissect_ansi_map_QualificationRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + QualificationRequest_set, hf_index, ett_ansi_map_QualificationRequest); + + return offset; +} + + +static const ber_sequence_t QualificationRequestRes_set[] = { + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { BER_CLASS_CON, 225, BER_FLAGS_IMPLTAG, dissect_analogRedirectRecord_impl }, + { BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authorizationDenied_impl }, + { BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authorizationPeriod_impl }, + { BER_CLASS_CON, 229, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaRedirectRecord_impl }, + { BER_CLASS_CON, 199, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_controlChannelMode_impl }, + { BER_CLASS_CON, 167, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_deniedAuthorizationPeriod_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_carrier_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_dest_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 238, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceRedirectionInfo_impl }, + { BER_CLASS_CON, 239, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_roamingIndication_impl }, + { 0, 0, 0, NULL } +}; - h = value / (3600 * 10); - m = (value - (h * (3600 * 10))) / (60 * 10); - s = (value - (h * (3600 * 10)) - (m * (60 * 10))) / 10; - ts = (value - (h * (3600 * 10)) - (m * (60 * 10)) - (s * 10)); +static int +dissect_ansi_map_QualificationRequestRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + QualificationRequestRes_set, hf_index, ett_ansi_map_QualificationRequestRes); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "(UTC) (in tenths of seconds - 1), %u (%u:%u:%u.%u)", - value, - h, - m, - s, - ts); + return offset; } -static void -param_call_status(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - if (len > 4) - { - proto_tree_add_text(tree, asn1->tvb, - asn1->offset, len, "Long Data (?)"); - asn1->offset += len; - return; - } +static const ber_sequence_t RandomVariableRequest_set[] = { + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 67, BER_FLAGS_IMPLTAG, dissect_randc_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_RandomVariableRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RandomVariableRequest_set, hf_index, ett_ansi_map_RandomVariableRequest); - asn1->offset = saved_offset; + return offset; +} - asn1_int32_value_decode(asn1, len, &value); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Call Setup in Progress"; break; - case 2: str = "Locally Allowed Call - No Action"; break; - default: - if (value < 0) { str = "Reserved for bilateral agreements. If unknown, treat as Not used"; } - else { str = "Reserved, treat as Not used"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, len, - str); +static int +dissect_ansi_map_RANDValidTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_randValidTime_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RANDValidTime(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_randValidTime); } -static void -param_ms_status(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - gboolean has_chan; - gboolean extended; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - extended = (value & 0x80) >> 7; - - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Extension (EXT), %s", - bigbuf, - extended ? "No Extension, last octet of sequence" : "Extension indicator, the octet continues through the next octet"); - - other_decode_bitfield_value(bigbuf, value, 0x60, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Location Information (LOC), %s", - bigbuf, - (value & 0x10) ? "MS location information available" : "No MS location information available"); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Contact, %s", - bigbuf, - (value & 0x08) ? "Radio Contact Established" : "No Radio Contact"); - - has_chan = (value & 0x04) >> 2; - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Channel, %s", - bigbuf, - has_chan ? "Traffic Channel Assigned" : "No Traffic Channel"); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Handoff, %s", - bigbuf, - (value & 0x02) ? "Intersystem Handoff" : "No Intersystem Handoff"); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Inactive, %s", - bigbuf, - (value & 0x01) ? "MS Inactive" : "MS Active"); - - if (len == 1) return; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - if (extended) - { - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Octet 1a ? spec. does not provide details"); - saved_offset = asn1->offset; +static const ber_sequence_t RandomVariableRequestRes_set[] = { + { BER_CLASS_CON, 40, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariable_impl }, + { BER_CLASS_CON, 148, BER_FLAGS_IMPLTAG, dissect_randValidTime_impl }, + { 0, 0, 0, NULL } +}; - EXTRANEOUS_DATA_CHECK(len, 2); +static int +dissect_ansi_map_RandomVariableRequestRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RandomVariableRequestRes_set, hf_index, ett_ansi_map_RandomVariableRequestRes); + + return offset; +} + + +static const ber_sequence_t RedirectionDirective_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_dest_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_carrier_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 101, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberString_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { 0, 0, 0, NULL } +}; - return; - } +static int +dissect_ansi_map_RedirectionDirective(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RedirectionDirective_set, hf_index, ett_ansi_map_RedirectionDirective); + + return offset; +} + + +static const value_string ansi_map_RedirectionReason_vals[] = { + { 0, "not-used" }, + { 1, "busy" }, + { 2, "no-Answer" }, + { 3, "unconditional" }, + { 4, "no-Page-Response" }, + { 5, "unavailable" }, + { 6, "unroutable" }, + { 7, "call-accepted" }, + { 8, "call-refused" }, + { 9, "uSCFvm-Divert-to-voice-mail" }, + { 10, "uSCFms-Divert-to-an-MS-provided-DN" }, + { 11, "uSCFnr-Divert-to-a-network-registered-DN" }, + { 0, NULL } +}; - if (has_chan) - { - switch (value) - { - case 0: str = "Not used "; break; - case 1: str = "Analog. The MS is currently assigned to an analog traffic channel"; break; - case 2: str = "NAMPS. The MS is currently assigned to an NAMPS traffic channel"; break; - case 3: str = "TDMA. The MS is currently assigned to a TDMA traffic channel"; break; - case 4: str = "CDMA. The MS is currently assigned to a CDMA traffic channel"; break; - default: - if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as Not used"; } - else { str = "Reserved for protocol extension, treat as Not used"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Radio Channel Type, %s", - str); +static int +dissect_ansi_map_RedirectionReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - saved_offset = asn1->offset; + return offset; +} +static int dissect_redirectionReason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RedirectionReason(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_redirectionReason); +} - EXTRANEOUS_DATA_CHECK(len, 2); - return; - } +static const ber_sequence_t RedirectionRequest_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 19, BER_FLAGS_IMPLTAG, dissect_redirectionReason_impl }, + { BER_CLASS_CON, 175, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption_impl }, + { BER_CLASS_CON, 288, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_legInformation_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { 0, 0, 0, NULL } +}; - asn1->offset -= 1; +static int +dissect_ansi_map_RedirectionRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RedirectionRequest_set, hf_index, ett_ansi_map_RedirectionRequest); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; } -static void -param_pos_info_code(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - - saved_offset = asn1->offset; - - asn1_int32_value_decode(asn1, 1, &value); - - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : MS Identity (MSID), %s", - bigbuf, - (value & 0x10) ? "MS Identity Requested" : "No MS Identity Requested"); - - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Routing Address (ROUTE), %s", - bigbuf, - (value & 0x08) ? "Routing Address Requested" : "No Routing Address Requested"); - - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Serving Cell ID (CELLID), %s", - bigbuf, - (value & 0x04) ? "Serving Cell ID Requested" : "No Serving Cell ID Requested"); - - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Location Area ID (LOCID), %s", - bigbuf, - (value & 0x02) ? "Location Area ID Requested" : "No Location Area ID Requested"); - - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Current, %s", - bigbuf, - (value & 0x01) ? "Provide the current MS location" : "Provide the last known MS location information, if known"); - - EXTRANEOUS_DATA_CHECK(len, 1); -} -static void -param_rel_reason(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); +static int +dissect_ansi_map_CancellationType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - saved_offset = asn1->offset; + return offset; +} +static int dissect_cancellationType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CancellationType(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cancellationType); +} - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Unspecified"; break; - case 1: str = "Call Over Clear Forward"; break; - case 2: str = "Call Over Clear Backward"; break; - case 3: str = "Handoff Successful"; break; - case 4: str = "Handoff Abort - call over"; break; - case 5: str = "Handoff Abort - not received"; break; - case 6: str = "Abnormal mobile termination"; break; - case 7: str = "Abnormal switch termination"; break; - case 8: str = "Special feature release"; break; - case 9: str = "Session Over Clear Forward"; break; - case 10: str = "Session Over Clear Backward"; break; - case 11: str = "Clear All Services Forward"; break; - case 12: str = "Clear All Services Backward"; break; - case 13: str = "Anchor MSC was removed from the packet data session"; break; - default: - if ((value >= 14) && (value <= 223)) { str = "Reserved, treat as Unspecified"; } - else { str = "Reserved for protocol extension, treat as Unspecified"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Reason, %s", - str); +static int +dissect_ansi_map_ControlChannelData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_controlChannelData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ControlChannelData(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_controlChannelData); } -static void -param_ho_reason(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_ReceivedSignalQuality(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_receivedSignalQuality_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ReceivedSignalQuality(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_receivedSignalQuality); +} - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Unspecified"; break; - case 2: str = "Weak signal"; break; - case 3: str = "Off-loading"; break; - case 4: str = "Anticipatory"; break; - default: - if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as Unspecified"; } - else { str = "Reserved for protocol extension, treat as Unspecified"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); + +static int +dissect_ansi_map_SystemAccessData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_systemAccessData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SystemAccessData(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_systemAccessData); } -static void -param_red_reason(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); +static const ber_sequence_t RegistrationCancellation_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 85, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cancellationType_impl }, + { BER_CLASS_CON, 55, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_controlChannelData_impl }, + { BER_CLASS_CON, 72, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_receivedSignalQuality_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 56, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_systemAccessData_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_RegistrationCancellation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RegistrationCancellation_set, hf_index, ett_ansi_map_RegistrationCancellation); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Busy"; break; - case 2: str = "No answer"; break; - case 3: str = "Unconditional"; break; - case 4: str = "No page response"; break; - case 5: str = "Unavailable"; break; - case 6: str = "Unroutable"; break; - case 7: str = "Call accepted"; break; - case 8: str = "Call refused"; break; - case 9: str = "USCFvm, divert to voice mail"; break; - case 10: str = "USCFms, divert to an MS provided DN"; break; - case 11: str = "USCFnr, divert to a network registered DN"; break; - default: - if ((value >= 12) && (value <= 223)) { str = "Reserved, treat as No answer"; } - else { str = "Reserved for protocol extension, treat as No answer"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static const value_string ansi_map_CancellationDenied_vals[] = { + { 0, "not-used" }, + { 1, "multipleAccess" }, + { 2, "busy" }, + { 0, NULL } +}; + + +static int +dissect_ansi_map_CancellationDenied(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_cancellationDenied_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CancellationDenied(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_cancellationDenied); } -static void -param_confid_mode(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - EXACT_DATA_CHECK(len, 1); +static const ber_sequence_t RegistrationCancellationRes_set[] = { + { BER_CLASS_CON, 38, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callHistoryCount_impl }, + { BER_CLASS_CON, 57, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cancellationDenied_impl }, + { BER_CLASS_CON, 55, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_controlChannelData_impl }, + { BER_CLASS_CON, 72, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_receivedSignalQuality_impl }, + { BER_CLASS_CON, 118, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_MessageWaitingIndicator_impl }, + { BER_CLASS_CON, 56, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_systemAccessData_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_RegistrationCancellationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RegistrationCancellationRes_set, hf_index, ett_ansi_map_RegistrationCancellationRes); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} - other_decode_bitfield_value(bigbuf, value, 0xf8, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Data Privacy (DP), %s", - bigbuf, - (value & 0x04) ? "ON" : "OFF"); - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Signaling Message Encryption (SE), %s", - bigbuf, - (value & 0x02) ? "ON" : "OFF"); +static int +dissect_ansi_map_AvailabilityType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Voice Privacy (VP), %s", - bigbuf, - (value & 0x01) ? "ON" : "OFF"); + return offset; +} +static int dissect_availabilityType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AvailabilityType(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_availabilityType); } -static void -param_sys_acc_type(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); +static const value_string ansi_map_BorderCellAccess_vals[] = { + { 0, "not-used" }, + { 1, "border-Cell-Access" }, + { 0, NULL } +}; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_BorderCellAccess(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Unspecified"; break; - case 2: str = "Flash request"; break; - case 3: str = "Autonomous registration"; break; - case 4: str = "Call origination"; break; - case 5: str = "Page response"; break; - case 6: str = "No access"; break; - case 7: str = "Power down registration"; break; - case 8: str = "SMS page response"; break; - case 9: str = "OTASP"; break; - default: - if ((value >= 10) && (value <= 223)) { str = "Reserved, treat as Unspecified"; } - else { str = "Reserved for protocol extension, treat as Unspecified"; } - break; - } + return offset; +} +static int dissect_borderCellAccess_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_BorderCellAccess(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_borderCellAccess); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); + + +static int +dissect_ansi_map_MSC_Address(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_msc_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_MSC_Address(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_msc_Address); } -static void -param_scm(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value, temp_int; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_SMS_Address(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_sms_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_Address(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_Address); +} + + +static const ber_sequence_t RegistrationNotification_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 17, BER_FLAGS_IMPLTAG, dissect_qualificationInformationCode_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { BER_CLASS_CON, 90, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_availabilityType_impl }, + { BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_borderCellAccess_impl }, + { BER_CLASS_CON, 232, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaNetworkIdentification_impl }, + { BER_CLASS_CON, 55, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_controlChannelData_impl }, + { BER_CLASS_CON, 199, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_controlChannelMode_impl }, + { BER_CLASS_CON, 53, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extendedMSCID_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 284, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_msc_Address_impl }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 72, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_receivedSignalQuality_impl }, + { BER_CLASS_CON, 44, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reportType_impl }, + { BER_CLASS_CON, 237, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceRedirectionCause_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 104, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_Address_impl }, + { BER_CLASS_CON, 118, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_MessageWaitingIndicator_impl }, + { BER_CLASS_CON, 56, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_systemAccessData_impl }, + { BER_CLASS_CON, 34, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_systemAccessType_impl }, + { BER_CLASS_CON, 49, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_systemCapabilities_impl }, + { BER_CLASS_CON, 47, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminalType_impl }, + { BER_CLASS_CON, 123, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { BER_CLASS_CON, 280, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_winCapability_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_RegistrationNotification(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RegistrationNotification_set, hf_index, ett_ansi_map_RegistrationNotification); - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); + return offset; +} - temp_int = ((value & 0x10) >> 2) | (value & 0x03); - switch (temp_int) - { - case 0: str = "Class I"; break; - case 1: str = "Class II"; break; - case 2: str = "Class III"; break; - case 3: str = "Class IV"; break; - case 4: str = "Class V"; break; - case 5: str = "Class VI"; break; - case 6: str = "Class VII"; break; - case 7: str = "Class VIII"; break; - } - other_decode_bitfield_value(bigbuf, value, 0x13, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Power %s", - bigbuf, - str); - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Bandwidth %s", - bigbuf, - (value & 0x08) ? "25 MHz" : "20 MHz"); +static int +dissect_ansi_map_AuthenticationCapability(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Transmission, %s", - bigbuf, - (value & 0x04) ? "Discontinuous" : "Continuous"); + return offset; +} +static int dissect_authenticationCapability_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AuthenticationCapability(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_authenticationCapability); } -static void -param_deny_acc(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_CallingFeaturesIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 99 "ansi_map.cnf" + tvbuff_t *parameter_tvb = NULL; + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + ¶meter_tvb); + + if (parameter_tvb){ + dissect_ansi_map_callingfeaturesindicator(parameter_tvb,pinfo,tree); + } + + + return offset; +} +static int dissect_callingFeaturesIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CallingFeaturesIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_callingFeaturesIndicator); +} - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Unspecified"; break; - case 2: str = "SSD Update failure"; break; - case 3: str = "COUNT Update failure"; break; - case 4: str = "Unique Challenge failure"; break; - case 5: str = "AUTHR mismatch"; break; - case 6: str = "COUNT mismatch"; break; - case 7: str = "Process collision"; break; - case 8: str = "Missing authentication parameters"; break; - case 9: str = "TerminalType mismatch"; break; - case 10: str = "MIN, IMSI or ESN authorization failure"; break; - default: - if ((value >= 11) && (value <= 223)) { str = "Reserved, treat as Unspecified"; } - else { str = "Reserved for protocol extension, treat as Unspecified"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static int +dissect_ansi_map_GeographicAuthorization(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_geographicAuthorization_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_GeographicAuthorization(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_geographicAuthorization); } -static void -param_cdma_sig_qual(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - EXACT_DATA_CHECK(len, 1); +static const value_string ansi_map_OriginationIndicator_vals[] = { + { 0, "not-used" }, + { 1, "prior-agreement" }, + { 2, "origination-denied" }, + { 3, "local-calls-only" }, + { 4, "selected-leading-digits-of-directorynumberor-of-international-E164-number" }, + { 5, "selected-leading-digits-of-directorynumberor-of-international-E164-numbe-and-local-calls-only" }, + { 6, "national-long-distance" }, + { 7, "international-calls" }, + { 8, "single-directory-number-or-international-E164-number" }, + { 0, NULL } +}; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_OriginationIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_originationIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_OriginationIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_originationIndicator); +} + - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - other_decode_bitfield_value(bigbuf, value, 0x3f, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Value %u", - bigbuf, - value & 0x3f); +static int +dissect_ansi_map_RestrictionDigits(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_restrictionDigits_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RestrictionDigits(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_restrictionDigits); } -static void -param_rec_sig_qual(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_SMS_OriginationRestrictions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_sms_OriginationRestrictions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_OriginationRestrictions(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_OriginationRestrictions); +} - switch (value) - { - case 0: str = "Not a usable signal"; break; - case 255: str = "Interference"; break; - default: - if ((value >= 1) && (value <= 8)) { str = "Reserved, treat as Not a usable signal"; } - else if ((value >= 9) && (value <= 245)) { str = "Usable signal range"; } - else if ((value >= 246) && (value <= 254)) { str = "Reserved, treat as Interference"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); + +static int +dissect_ansi_map_SMS_TerminationRestrictions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_sms_TerminationRestrictions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_TerminationRestrictions(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_TerminationRestrictions); } -static void -param_sig_qual(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_SPINIPIN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_spinipin_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SPINIPIN(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_spinipin); +} - switch (value) - { - case 0: str = "Not a usable signal"; break; - case 255: str = "Interference"; break; - default: - if ((value >= 1) && (value <= 8)) { str = "Reserved, treat as Not a usable signal"; } - else if ((value >= 9) && (value <= 245)) { str = "Usable signal range"; } - else if ((value >= 246) && (value <= 254)) { str = "Reserved, treat as Interference"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); + +static int +dissect_ansi_map_SPINITriggers(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_spiniTriggers_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SPINITriggers(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_spiniTriggers); } -static void -param_ssd_no_share(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); +static const value_string ansi_map_TerminationRestrictionCode_vals[] = { + { 0, "not-used" }, + { 1, "termination-denied" }, + { 2, "unrestricted" }, + { 3, "the-treatment-for-this-value-is-not-specified" }, + { 0, NULL } +}; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_TerminationRestrictionCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_terminationRestrictionCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TerminationRestrictionCode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_terminationRestrictionCode); +} + + +static const ber_sequence_t RegistrationNotificationRes_set[] = { + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { BER_CLASS_CON, 225, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_analogRedirectRecord_impl }, + { BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authorizationDenied_impl }, + { BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authorizationPeriod_impl }, + { BER_CLASS_CON, 229, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaRedirectRecord_impl }, + { BER_CLASS_CON, 55, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_controlChannelData_impl }, + { BER_CLASS_CON, 167, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_deniedAuthorizationPeriod_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_Carrier_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_Destination_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 78, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authenticationCapability_impl }, + { BER_CLASS_CON, 25, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingFeaturesIndicator_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 307, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_controlNetworkID_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 143, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_geographicAuthorization_impl }, + { BER_CLASS_CON, 92, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_messageWaitingNotificationCount_impl }, + { BER_CLASS_CON, 289, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_messageWaitingNotificationType_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 23, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_originationIndicator_impl }, + { BER_CLASS_CON, 98, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_originationTriggers_impl }, + { BER_CLASS_CON, 146, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pACAIndicator_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 227, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_restrictionDigits_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 115, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginationRestrictions_impl }, + { BER_CLASS_CON, 117, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_TerminationRestrictions_impl }, + { BER_CLASS_CON, 154, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_spinipin_impl }, + { BER_CLASS_CON, 155, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_spiniTriggers_impl }, + { BER_CLASS_CON, 24, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationRestrictionCode_impl }, + { BER_CLASS_CON, 122, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTriggers_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { BER_CLASS_CON, 355, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyCategory_impl }, + { BER_CLASS_CON, 72, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_receivedSignalQuality_impl }, + { BER_CLASS_CON, 238, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceRedirectionInfo_impl }, + { BER_CLASS_CON, 239, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_roamingIndication_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 118, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_MessageWaitingIndicator_impl }, + { BER_CLASS_CON, 56, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_systemAccessData_impl }, + { 0, 0, 0, NULL } +}; - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Discard SSD"; break; - default: - str = "Reserved, treat as Discard SSD"; - break; - } +static int +dissect_ansi_map_RegistrationNotificationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RegistrationNotificationRes_set, hf_index, ett_ansi_map_RegistrationNotificationRes); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); + return offset; } -static void -param_report_type(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_DigitCollectionControl(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_digitCollectionControl_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DigitCollectionControl(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_digitCollectionControl); +} - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Unspecified security violation"; break; - case 2: str = "MSID/ESN mismatch"; break; - case 3: str = "RANDC mismatch"; break; - case 4: str = "Reserved (see TSB51)"; break; - case 5: str = "SSD Update failed"; break; - case 6: str = "Reserved (see TSB51)"; break; - case 7: str = "COUNT mismatch"; break; - case 8: str = "Reserved (see TSB51)"; break; - case 9: str = "Unique Challenge failed"; break; - case 10: str = "Unsolicited Base Station Challenge"; break; - case 11: str = "SSD Update no response"; break; - case 12: str = "COUNT Update no response"; break; - case 13: str = "Unique Challenge no response"; break; - case 14: str = "AUTHR mismatch"; break; - case 15: str = "TERMTYP mismatch"; break; - case 16: str = "Missing authentication parameters"; break; - default: - if ((value >= 17) && (value <= 223)) { str = "Reserved, treat as Unspecified security violation"; } - else { str = "Reserved for protocol extension, treat as Unspecified security violation"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static const ber_sequence_t RemoteUserInteractionDirective_set[] = { + { BER_CLASS_CON, 130, BER_FLAGS_IMPLTAG, dissect_announcementList_impl }, + { BER_CLASS_CON, 139, BER_FLAGS_IMPLTAG, dissect_digitCollectionControl_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_RemoteUserInteractionDirective(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RemoteUserInteractionDirective_set, hf_index, ett_ansi_map_RemoteUserInteractionDirective); + + return offset; } -static void -param_term_type(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); +static const ber_sequence_t RemoteUserInteractionDirectiveRes_set[] = { + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_RemoteUserInteractionDirectiveRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RemoteUserInteractionDirectiveRes_set, hf_index, ett_ansi_map_RemoteUserInteractionDirectiveRes); - saved_offset = asn1->offset; + return offset; +} - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Not distinguished, EIA/TIA-553, IS-54-A, IS-88, IS-91, IS-94"; break; - case 2: str = "IS-54-B"; break; - case 3: str = "IS-136"; break; - case 4: str = "J-STD-011 (rescinded 11/23/99)"; break; - case 5: str = "IS-136-A or TIA/EIA-136 Revision-0"; break; - case 6: str = "TIA/EIA-136-A"; break; - case 7: str = "TIA/EIA-136-B"; break; - case 32: str = "IS-95"; break; - case 33: str = "IS-95-A"; break; - case 34: str = "J-STD-008"; break; - case 35: str = "IS-95-B"; break; - case 36: str = "IS-2000"; break; - case 64: str = "IS-88"; break; - case 65: str = "IS-94"; break; - case 66: str = "IS-91"; break; - case 67: str = "J-STD-014"; break; - case 68: str = "TIA/EIA-553-A"; break; - case 69: str = "IS-91-A"; break; - default: - if ((value >= 8) && (value <= 31)) { str = "Reserved, treat as IS-54-B"; } - else if ((value >= 37) && (value <= 63)) { str = "Reserved, treat as IS-95-A"; } - else if ((value >= 70) && (value <= 223)) { str = "Reserved, treat as Not distinguished"; } - else { str = "Reserved for protocol extension, treat as Not distinguished"; } - break; - } +static const ber_sequence_t ResetCircuit_set[] = { + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static int +dissect_ansi_map_ResetCircuit(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ResetCircuit_set, hf_index, ett_ansi_map_ResetCircuit); + + return offset; } -static void -param_term_res(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); +static const value_string ansi_map_TrunkStatus_vals[] = { + { 0, "idle" }, + { 1, "blocked" }, + { 0, NULL } +}; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_TrunkStatus(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_trunkStatus_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TrunkStatus(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_trunkStatus); +} - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Termination denied"; break; - case 2: str = "Unrestricted"; break; - case 3: str = "Treatment for this value is not specified"; break; - default: - if ((value >= 4) && (value <= 223)) { str = "Reserved, treat as Unrestricted"; } - else { str = "Reserved for protocol extension, treat as Unrestricted"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static const ber_sequence_t ResetCircuitRes_set[] = { + { BER_CLASS_CON, 16, BER_FLAGS_IMPLTAG, dissect_trunkStatus_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_ResetCircuitRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ResetCircuitRes_set, hf_index, ett_ansi_map_ResetCircuitRes); + + return offset; } -static void -param_dereg(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_UserGroup(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_userGroup_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_UserGroup(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_userGroup); +} + + +static const ber_sequence_t RoutingRequest_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { BER_CLASS_CON, 75, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertCode_impl }, + { BER_CLASS_CON, 243, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyName_impl }, + { BER_CLASS_CON, 80, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits1_impl }, + { BER_CLASS_CON, 81, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits2_impl }, + { BER_CLASS_CON, 82, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString1_impl }, + { BER_CLASS_CON, 83, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 175, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption_impl }, + { BER_CLASS_CON, 199, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_controlChannelMode_impl }, + { BER_CLASS_CON, 87, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_destinationDigits_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 299, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText2_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 288, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_legInformation_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 96, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_noAnswerTime_impl }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 169, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotBillingID_impl }, + { BER_CLASS_CON, 168, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotNumber_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 101, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberString_impl }, + { BER_CLASS_CON, 245, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingPartyName_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { BER_CLASS_CON, 121, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTreatment_impl }, + { BER_CLASS_CON, 122, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTriggers_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { BER_CLASS_CON, 208, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_userGroup_impl }, + { BER_CLASS_CON, 123, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { BER_CLASS_CON, 160, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voiceMailboxNumber_impl }, + { BER_CLASS_CON, 159, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voiceMailboxPIN_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_RoutingRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RoutingRequest_set, hf_index, ett_ansi_map_RoutingRequest); + + return offset; +} - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Deregister for an unspecified reason"; break; - case 2: str = "Deregister for an administrative reason"; break; - case 3: str = "Deregister due to MS power down"; break; - default: - if ((value >= 4) && (value <= 223)) { str = "Reserved, treat as Deregister for an unspecified reason"; } - else { str = "Reserved for protocol extension, treat as Deregister for an unspecified reason"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static const ber_sequence_t RoutingRequestRes_set[] = { + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_accessDeniedReason_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 175, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption_impl }, + { BER_CLASS_CON, 162, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_conditionallyDeniedReason_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_Destination_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_RoutingRequestRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RoutingRequestRes_set, hf_index, ett_ansi_map_RoutingRequestRes); + + return offset; } -static void -param_group_info(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - SHORT_DATA_CHECK(len, 4); - saved_offset = asn1->offset; +static int +dissect_ansi_map_SMS_BearerData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 266 "ansi_map.cnf" + SMS_BearerData_tvb = NULL; + + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + &SMS_BearerData_tvb); + - asn1_int32_value_decode(asn1, 4, &value); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Value %u", - value); - EXTRANEOUS_DATA_CHECK(len, 4); + return offset; +} +static int dissect_sms_BearerData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_BearerData(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_BearerData); } -static void -param_auth_den(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_SMS_TeleserviceIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { +#line 273 "ansi_map.cnf" +static gint32 ansi_map_sms_tele_id = -1; - asn1_int32_value_decode(asn1, 1, &value); + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + &ansi_map_sms_tele_id); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Delinquent account"; break; - case 2: str = "Invalid serial number"; break; - case 3: str = "Stolen unit"; break; - case 4: str = "Duplicate unit"; break; - case 5: str = "Unassigned directory number"; break; - case 6: str = "Unspecified"; break; - case 7: str = "Multiple access"; break; - case 8: str = "Not Authorized for the MSC"; break; - case 9: str = "Missing authentication parameters"; break; - case 10: str = "Terminal Type mismatch"; break; - default: - if ((value >= 11) && (value <= 223)) { str = "Reserved, treat as Unspecified"; } - else { str = "Reserved for protocol extension, treat as Unspecified"; } - break; - } + if ((ansi_map_sms_tele_id != -1)&&(SMS_BearerData_tvb !=NULL)) + { + dissector_try_port(is637_tele_id_dissector_table, ansi_map_sms_tele_id, SMS_BearerData_tvb, g_pinfo, g_tree); + ansi_map_sms_tele_id = -1; + } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Reason, %s (%u)", - str, - value); + + + return offset; +} +static int dissect_sms_TeleserviceIdentifier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_TeleserviceIdentifier(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_TeleserviceIdentifier); } -static const gchar * -find_trig_type(gint32 value) -{ - const gchar *str = NULL; - switch (value) - { - case 0: str = "Unspecified"; break; - case 1: str = "All Calls"; break; - case 2: str = "Double Introducing Star"; break; - case 3: str = "Single Introducing Star"; break; - case 4: str = "Reserved [for Home System Feature Code"; break; - case 5: str = "Double Introducing Pound"; break; - case 6: str = "Single Introducing Pound"; break; - case 7: str = "Revertive Call"; break; - case 8: str = "0 Digit"; break; - case 9: str = "1 Digit"; break; - case 10: str = "2 Digit"; break; - case 11: str = "3 Digit"; break; - case 12: str = "4 Digit"; break; - case 13: str = "5 Digit"; break; - case 14: str = "6 Digit"; break; - case 15: str = "7 Digit"; break; - case 16: str = "8 Digit"; break; - case 17: str = "9 Digit"; break; - case 18: str = "10 Digit"; break; - case 19: str = "11 Digit"; break; - case 20: str = "12 Digit"; break; - case 21: str = "13 Digit"; break; - case 22: str = "14 Digit"; break; - case 23: str = "15 Digit"; break; - case 24: str = "Local Call"; break; - case 25: str = "Intra-LATA Toll Call"; break; - case 26: str = "Inter-LATA Toll Call"; break; - case 27: str = "World Zone Call"; break; - case 28: str = "International Call"; break; - case 29: str = "Unrecognized Number"; break; - case 30: str = "Prior Agreement"; break; - case 31: str = "Specific Called Party Digit String"; break; - case 32: str = "Mobile Termination"; break; - case 33: str = "Advanced Termination"; break; - case 34: str = "Location"; break; - case 35: str = "Locally Allowed Specific Digit String"; break; - case 36: str = "Origination Attempt Authorized"; break; - case 37: str = "Calling Routing Address Available"; break; - case 38: str = "Initial Termination"; break; - case 39: str = "Called Routing Address Available"; break; - case 40: str = "O Answer"; break; - case 41: str = "O Disconnect"; break; - case 42: str = "O Called Party Busy"; break; - case 43: str = "O No Answer"; break; - case 64: str = "Terminating Resource Available"; break; - case 65: str = "T Busy"; break; - case 66: str = "T No Answer"; break; - case 67: str = "T No Page Response"; break; - case 68: str = "T Unroutable"; break; - case 69: str = "T Answer"; break; - case 70: str = "T Disconnect"; break; - case 220: str = "Reserved for TDP-R DP Type value"; break; - case 221: str = "Reserved for TDP-N DP Type value"; break; - case 222: str = "Reserved for EDP-R DP Type value"; break; - case 223: str = "Reserved for EDP-N DP Type value"; break; - default: - if ((value >= 44) && (value <= 63)) { str = "Reserved, treat as Unspecified"; } - else if ((value >= 71) && (value <= 219)) { str = "Reserved, treat as Unspecified"; } - else { str = "Reserved for protocol extension, treat as Unspecified"; } - break; - } - return(str); +static int +dissect_ansi_map_SMS_ChargeIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_sms_ChargeIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_ChargeIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_ChargeIndicator); } -static void -param_trig_type(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_SMS_DestinationAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_sms_DestinationAddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_DestinationAddress(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_DestinationAddress); +} + - asn1_int32_value_decode(asn1, 1, &value); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Trigger (%u) %s", - value, - find_trig_type(value)); +static int +dissect_ansi_map_SMS_OriginalDestinationAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_sms_OriginalDestinationAddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_OriginalDestinationAddress(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_OriginalDestinationAddress); } -static void -param_win_op_cap(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_SMS_OriginalDestinationSubaddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_Subaddress(implicit_tag, tvb, offset, pinfo, tree, hf_index); - other_decode_bitfield_value(bigbuf, value, 0xf8, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); + return offset; +} +static int dissect_sms_OriginalDestinationSubaddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_OriginalDestinationSubaddress(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_OriginalDestinationSubaddress); +} - switch ((value & 0x04) >> 2) - { - case 0x00: str = "Sender does not support PositionRequest OP"; break; - default: - str = "Sender supports PositionRequest OP"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); - switch ((value & 0x02) >> 1) - { - case 0x00: str = "Sender does not support CallControlDirective OP"; break; - default: - str = "Sender supports CallControlDirective OP"; - break; - } +static int +dissect_ansi_map_SMS_OriginalOriginatingAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_sms_OriginalOriginatingAddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_OriginalOriginatingAddress(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_OriginalOriginatingAddress); +} - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); - switch (value & 0x01) - { - case 0x00: str = "Sender does not support ConnectResource, DisconnectResource, ConnectionFailureReport and ResetTimer (SSFT timer) OPs"; break; - default: - str = "Sender supports ConnectResource, DisconnectResource, ConnectionFailureReport and ResetTimer (SSFT timer) OPs"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); +static int +dissect_ansi_map_SMS_OriginalOriginatingSubaddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_Subaddress(implicit_tag, tvb, offset, pinfo, tree, hf_index); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_sms_OriginalOriginatingSubaddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_OriginalOriginatingSubaddress(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_OriginalOriginatingSubaddress); } -static void -param_win_trig_list(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value, i, j; - guint saved_offset; - saved_offset = asn1->offset; - j = 0; - i = 0; +static int +dissect_ansi_map_SMS_OriginatingAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_sms_OriginatingAddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_OriginatingAddress(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_OriginatingAddress); +} + + +static const ber_sequence_t SMSDeliveryBackward_set[] = { + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 105, BER_FLAGS_IMPLTAG, dissect_sms_BearerData_impl }, + { BER_CLASS_CON, 116, BER_FLAGS_IMPLTAG, dissect_sms_TeleserviceIdentifier_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 106, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_ChargeIndicator_impl }, + { BER_CLASS_CON, 107, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_DestinationAddress_impl }, + { BER_CLASS_CON, 110, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginalDestinationAddress_impl }, + { BER_CLASS_CON, 111, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginalDestinationSubaddress_impl }, + { BER_CLASS_CON, 112, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginalOriginatingAddress_impl }, + { BER_CLASS_CON, 113, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginalOriginatingSubaddress_impl }, + { BER_CLASS_CON, 114, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginatingAddress_impl }, + { 0, 0, 0, NULL } +}; - do - { - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_SMSDeliveryBackward(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SMSDeliveryBackward_set, hf_index, ett_ansi_map_SMSDeliveryBackward); - switch (value) - { - case 0xdc: - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "TDP-R's armed"); + return offset; +} - j = 0; - break; - case 0xdd: - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "TDP-N's armed"); - j = 0; - break; +static int +dissect_ansi_map_SMS_CauseCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - case 0xde: - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "EDP-R's armed"); + return offset; +} +static int dissect_sms_CauseCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_CauseCode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_CauseCode); +} - j = 0; - break; - case 0xdf: - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "EDP-N's armed"); +static const ber_sequence_t SMSDeliveryBackwardRes_set[] = { + { BER_CLASS_CON, 105, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_BearerData_impl }, + { BER_CLASS_CON, 153, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_CauseCode_impl }, + { 0, 0, 0, NULL } +}; - j = 0; - break; +static int +dissect_ansi_map_SMSDeliveryBackwardRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SMSDeliveryBackwardRes_set, hf_index, ett_ansi_map_SMSDeliveryBackwardRes); + + return offset; +} + + +static const ber_sequence_t SMSDeliveryForward_set[] = { + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 105, BER_FLAGS_IMPLTAG, dissect_sms_BearerData_impl }, + { BER_CLASS_CON, 116, BER_FLAGS_IMPLTAG, dissect_sms_TeleserviceIdentifier_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 106, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_ChargeIndicator_impl }, + { BER_CLASS_CON, 107, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_DestinationAddress_impl }, + { BER_CLASS_CON, 110, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginalDestinationAddress_impl }, + { BER_CLASS_CON, 111, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginalDestinationSubaddress_impl }, + { BER_CLASS_CON, 112, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginalOriginatingAddress_impl }, + { BER_CLASS_CON, 113, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginalOriginatingSubaddress_impl }, + { BER_CLASS_CON, 114, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginatingAddress_impl }, + { 0, 0, 0, NULL } +}; - default: - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "[%u] (%u) %s", - j, - value, - find_trig_type(value)); - j++; - break; - } +static int +dissect_ansi_map_SMSDeliveryForward(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SMSDeliveryForward_set, hf_index, ett_ansi_map_SMSDeliveryForward); - saved_offset = asn1->offset; - i++; - } - while ((len - i) > 0); + return offset; } -static void -param_trans_cap(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - char *p; - char *buf; - buf=ep_alloc(1024); - saved_offset = asn1->offset; +static const ber_sequence_t SMSDeliveryForwardRes_set[] = { + { BER_CLASS_CON, 105, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_BearerData_impl }, + { BER_CLASS_CON, 153, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_CauseCode_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_SMSDeliveryForwardRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SMSDeliveryForwardRes_set, hf_index, ett_ansi_map_SMSDeliveryForwardRes); - switch ((value & 0x80) >> 7) - { - case 0x00: str = "System is not capable of supporting CNAP/CNAR (NAMI)"; break; - default: - str = "System is capable of supporting CNAP/CNAR (NAMI)"; - break; - } + return offset; +} - other_decode_bitfield_value(buf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - buf, str); - switch ((value & 0x40) >> 6) - { - case 0x00: str = "System is not capable of supporting NDSS"; break; - default: - str = "System is capable of supporting NDSS"; - break; - } - other_decode_bitfield_value(buf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - buf, str); +static int +dissect_ansi_map_InterMessageTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - switch ((value & 0x20) >> 5) - { - case 0x00: str = "System is not capable of supporting User Zones (UZCI)"; break; - default: - str = "System is capable of supporting User Zones (UZCI)"; - break; - } + return offset; +} +static int dissect_interMessageTime_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_InterMessageTime(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_interMessageTime); +} - other_decode_bitfield_value(buf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - buf, str); - switch ((value & 0x10) >> 4) - { - case 0x00: str = "System is not capable of supporting local SPINI"; break; - default: - str = "System is capable of supporting local SPINI"; - break; - } - other_decode_bitfield_value(buf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - buf, str); +static int +dissect_ansi_map_NewlyAssignedMIN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_MINType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - switch ((value & 0x08) >> 3) - { - case 0x00: str = "System is not capable of interacting with the user (RUI)"; break; - default: - str = "System is capable of interacting with the user (RUI)"; - break; - } + return offset; +} +static int dissect_newlyAssignedMIN_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_NewlyAssignedMIN(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_newlyAssignedMIN); +} - other_decode_bitfield_value(buf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - buf, str); - switch ((value & 0x04) >> 2) - { - case 0x00: str = "System is not capable of honoring the Announcement List parameter (ANN)"; break; - default: - str = "System is capable of honoring the Announcement List parameter (ANN)"; - break; - } - other_decode_bitfield_value(buf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - buf, str); +static int +dissect_ansi_map_IMSIType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - switch ((value & 0x02) >> 1) - { - case 0x00: str = "System is not capable of detecting a busy condition (BUSY)"; break; - default: - str = "System is capable of detecting a busy condition (BUSY)"; - break; - } + return offset; +} - other_decode_bitfield_value(buf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - buf, str); - switch (value & 0x01) - { - case 0x00: str = "System is not capable of supporting the IS-41-C profile parameter (PROFILE)"; break; - default: - str = "System is capable of supporting the IS-41-C profile parameter (PROFILE)"; - break; - } - other_decode_bitfield_value(buf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - buf, str); +static int +dissect_ansi_map_NewlyAssignedIMSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_IMSIType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - if (len == 1) return; + return offset; +} +static int dissect_newlyAssignedIMSI_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_NewlyAssignedIMSI(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_newlyAssignedIMSI); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - switch ((value & 0x80) >> 7) - { - case 0x00: str = "System is not capable of supporting the CDMA Over the Air Parameter Administration"; break; - default: - str = "System is capable of supporting the CDMA Over the Air Parameter Administration"; - break; - } +static int +dissect_ansi_map_NewMINExtension(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_MINType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - other_decode_bitfield_value(buf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - buf, str); + return offset; +} +static int dissect_newMINExtension_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_NewMINExtension(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_newMINExtension); +} - switch ((value & 0x40) >> 6) - { - case 0x00: str = "System is not capable of supporting lower layer segmentation & reassembly (S&R)"; break; - default: - str = "System is capable of supporting lower layer segmentation & reassembly (S&R)"; - break; - } - other_decode_bitfield_value(buf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - buf, str); - switch ((value & 0x20) >> 5) - { - case 0x00: str = "System is not capable of supporting the Trigger Address List parameter (WADDR)"; break; - default: - str = "System is capable of supporting the Trigger Address List parameter (WADDR)"; - break; - } +static int +dissect_ansi_map_SMS_MessageCount(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(buf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - buf, str); + return offset; +} +static int dissect_sms_MessageCount_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_MessageCount(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_MessageCount); +} - switch ((value & 0x10) >> 4) - { - case 0x00: str = "System is not capable of supporting the Termination List parameter (TL)"; break; - default: - str = "System is capable of supporting the Termination List parameter (TL)"; - break; - } - other_decode_bitfield_value(buf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - buf, str); - p = other_decode_bitfield_value(buf, value, 0x0f, 8); - switch (value & 0x0f) - { - case 0x00: strcat(p, " : System cannot accept a termination at this time"); break; - default: - g_snprintf(p, 1024-(p-buf), " : System supports %u call leg(s)", value & 0x0f); - break; - } +static int +dissect_ansi_map_SMS_NotificationIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s", - buf); + return offset; +} +static int dissect_sms_NotificationIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_NotificationIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_NotificationIndicator); +} - if (len == 2) return; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_TemporaryReferenceNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_temporaryReferenceNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TemporaryReferenceNumber(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_temporaryReferenceNumber); +} + + +static const ber_sequence_t SMSDeliveryPointToPoint_set[] = { + { BER_CLASS_CON, 105, BER_FLAGS_IMPLTAG, dissect_sms_BearerData_impl }, + { BER_CLASS_CON, 116, BER_FLAGS_IMPLTAG, dissect_sms_TeleserviceIdentifier_impl }, + { BER_CLASS_CON, 128, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_actionCode_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 325, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_interMessageTime_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 187, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_newlyAssignedMIN_impl }, + { BER_CLASS_CON, 287, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_newlyAssignedIMSI_impl }, + { BER_CLASS_CON, 328, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_newMINExtension_impl }, + { BER_CLASS_CON, 193, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceIndicator_impl }, + { BER_CLASS_CON, 106, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_ChargeIndicator_impl }, + { BER_CLASS_CON, 107, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_DestinationAddress_impl }, + { BER_CLASS_CON, 108, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_MessageCount_impl }, + { BER_CLASS_CON, 109, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_NotificationIndicator_impl }, + { BER_CLASS_CON, 110, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginalDestinationAddress_impl }, + { BER_CLASS_CON, 111, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginalDestinationSubaddress_impl }, + { BER_CLASS_CON, 112, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginalOriginatingAddress_impl }, + { BER_CLASS_CON, 113, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginalOriginatingSubaddress_impl }, + { BER_CLASS_CON, 114, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginatingAddress_impl }, + { BER_CLASS_CON, 195, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_temporaryReferenceNumber_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(buf, value, 0xf8, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - buf); +static int +dissect_ansi_map_SMSDeliveryPointToPoint(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SMSDeliveryPointToPoint_set, hf_index, ett_ansi_map_SMSDeliveryPointToPoint); - switch ((value & 0x04) >> 2) - { - case 0x00: str = "The system is not capable of supporting external MAHO requests"; break; - default: - str = "The system is capable of supporting external MAHO requests (e.g. for positioning)"; - break; - } + return offset; +} - other_decode_bitfield_value(buf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - buf, str); - other_decode_bitfield_value(buf, value, 0x03, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - buf); - EXTRANEOUS_DATA_CHECK(len, 3); +static int +dissect_ansi_map_MobileStationIMSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_IMSIType(implicit_tag, tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_mobileStationIMSI_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_MobileStationIMSI(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_mobileStationIMSI); } -static void -param_spini_trig(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - SHORT_DATA_CHECK(len, 4); +static const value_string ansi_map_MobileStationMSID_vals[] = { + { 184, "mobileStationMIN" }, + { 286, "mobileStationIMSI" }, + { 0, NULL } +}; - saved_offset = asn1->offset; +static const ber_choice_t MobileStationMSID_choice[] = { + { 184, BER_CLASS_CON, 184, BER_FLAGS_IMPLTAG, dissect_mobileStationMIN_impl }, + { 286, BER_CLASS_CON, 286, BER_FLAGS_IMPLTAG, dissect_mobileStationIMSI_impl }, + { 0, 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_MobileStationMSID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + MobileStationMSID_choice, hf_index, ett_ansi_map_MobileStationMSID, + NULL); - switch ((value & 0x80) >> 7) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any Revertive Call attempt"; break; - break; - } + return offset; +} +static int dissect_mobileStationMSID(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_MobileStationMSID(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_mobileStationMSID); +} - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Revertive Call (RvtC), %s", - bigbuf, str); - switch ((value & 0x40) >> 6) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt to an unrecognized number"; break; - break; - } +static const ber_sequence_t SMSDeliveryPointToPointRes_set[] = { + { BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authorizationDenied_impl }, + { BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_denyAccess_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_mobileStationMSID }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 105, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_BearerData_impl }, + { BER_CLASS_CON, 153, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_CauseCode_impl }, + { BER_CLASS_CON, 49, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_systemCapabilities_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Unrecognized Number (Unrec), %s", - bigbuf, str); +static int +dissect_ansi_map_SMSDeliveryPointToPointRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SMSDeliveryPointToPointRes_set, hf_index, ett_ansi_map_SMSDeliveryPointToPointRes); - switch ((value & 0x20) >> 5) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt outside of the current World Zone (as defined in ITU-T Rec. E.164)"; - break; - } + return offset; +} - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : World Zone (WZ), %s", - bigbuf, str); - switch ((value & 0x10) >> 4) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any international call attempt"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : International (Intl), %s", - bigbuf, str); +static int +dissect_ansi_map_SMS_AccessDeniedReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - switch ((value & 0x08) >> 3) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any toll calls outside the local carrier's serving area"; - break; - } + return offset; +} +static int dissect_sms_AccessDeniedReason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SMS_AccessDeniedReason(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sms_AccessDeniedReason); +} - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Non-Local (Inter-LATA) Toll (NLTOLL/OLATA), %s", - bigbuf, str); - switch ((value & 0x04) >> 2) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any local toll call attempt. Refers to intra-LATA toll within the NANP"; - break; - } +static const ber_sequence_t SMSNotification_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 152, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_AccessDeniedReason_impl }, + { BER_CLASS_CON, 104, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_Address_impl }, + { BER_CLASS_CON, 116, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_TeleserviceIdentifier_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Local (Intra-LATA) Toll (LTOLL/ILATA), %s", - bigbuf, str); +static int +dissect_ansi_map_SMSNotification(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SMSNotification_set, hf_index, ett_ansi_map_SMSNotification); - switch ((value & 0x02) >> 1) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any local call attempt"; - break; - } + return offset; +} - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Local, %s", - bigbuf, str); - switch (value & 0x01) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt. This overrides all other values."; - break; - } +static const ber_sequence_t SMSNotificationRes_set[] = { + { BER_CLASS_CON, 108, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_MessageCount_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : All Origination (All), %s", - bigbuf, str); +static int +dissect_ansi_map_SMSNotificationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SMSNotificationRes_set, hf_index, ett_ansi_map_SMSNotificationRes); - saved_offset = asn1->offset; + return offset; +} - asn1_int32_value_decode(asn1, 1, &value); - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +static const ber_sequence_t SMSRequest_set[] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 193, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceIndicator_impl }, + { BER_CLASS_CON, 109, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_NotificationIndicator_impl }, + { BER_CLASS_CON, 116, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_TeleserviceIdentifier_impl }, + { 0, 0, 0, NULL } +}; - switch ((value & 0x10) >> 4) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any number matching a criteria of a prior agreement"; - break; - } +static int +dissect_ansi_map_SMSRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SMSRequest_set, hf_index, ett_ansi_map_SMSRequest); - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Prior Agreement (PA), %s", - bigbuf, str); + return offset; +} - switch ((value & 0x08) >> 3) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any number beginning with two Pound ## digits"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Double Pound (DP), %s", - bigbuf, str); +static const ber_sequence_t SMSRequestRes_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 152, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_AccessDeniedReason_impl }, + { BER_CLASS_CON, 104, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_Address_impl }, + { BER_CLASS_CON, 153, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_CauseCode_impl }, + { 0, 0, 0, NULL } +}; - switch ((value & 0x04) >> 2) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any number beginning with a Pound # digit"; - break; - } +static int +dissect_ansi_map_SMSRequestRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SMSRequestRes_set, hf_index, ett_ansi_map_SMSRequestRes); + + return offset; +} + + +static const ber_sequence_t TransferToNumberRequest_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 19, BER_FLAGS_IMPLTAG, dissect_redirectionReason_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { BER_CLASS_CON, 340, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_acgencountered_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 243, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyName_impl }, + { BER_CLASS_CON, 80, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits1_impl }, + { BER_CLASS_CON, 81, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 175, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption_impl }, + { BER_CLASS_CON, 163, BER_FLAGS_OPTIONAL, dissect_groupInformation }, + { BER_CLASS_CON, 288, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_legInformation_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 169, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotBillingID_impl }, + { BER_CLASS_CON, 168, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotNumber_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { BER_CLASS_CON, 123, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { BER_CLASS_CON, 280, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_winCapability_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Pound, %s", - bigbuf, str); +static int +dissect_ansi_map_TransferToNumberRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TransferToNumberRequest_set, hf_index, ett_ansi_map_TransferToNumberRequest); + + return offset; +} + + +static const ber_sequence_t TransferToNumberRequestRes_set[] = { + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_Destination_impl }, + { BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_accessDeniedReason_impl }, + { BER_CLASS_CON, 128, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_actionCode_impl }, + { BER_CLASS_CON, 130, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_announcementList_impl }, + { BER_CLASS_CON, 82, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString1_impl }, + { BER_CLASS_CON, 83, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_Carrier_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 299, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText2_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 88, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_RedirectionIndicator_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ServiceID_impl }, + { BER_CLASS_CON, 163, BER_FLAGS_OPTIONAL, dissect_groupInformation }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 96, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_noAnswerTime_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 101, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberString_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 120, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationList_impl }, + { BER_CLASS_CON, 122, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTriggers_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { 0, 0, 0, NULL } +}; - switch ((value & 0x02) >> 1) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any number beginning with two Star ** digits"; - break; - } +static int +dissect_ansi_map_TransferToNumberRequestRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TransferToNumberRequestRes_set, hf_index, ett_ansi_map_TransferToNumberRequestRes); - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Double Star (DS), %s", - bigbuf, str); + return offset; +} - switch (value & 0x01) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any number beginning with a Star * digit"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Star, %s", - bigbuf, str); +static const value_string ansi_map_SeizureType_vals[] = { + { 0, "unspecified" }, + { 1, "loop-back" }, + { 0, NULL } +}; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_SeizureType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - switch ((value & 0x80) >> 7) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt with 7 digits"; - break; - } + return offset; +} +static int dissect_seizureType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SeizureType(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_seizureType); +} - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 7 digits, %s", - bigbuf, str); - switch ((value & 0x40) >> 6) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt with 6 digits"; - break; - } +static const ber_sequence_t TrunkTest_set[] = { + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 15, BER_FLAGS_IMPLTAG, dissect_seizureType_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 6 digits, %s", - bigbuf, str); +static int +dissect_ansi_map_TrunkTest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TrunkTest_set, hf_index, ett_ansi_map_TrunkTest); - switch ((value & 0x20) >> 5) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt with 5 digits"; - break; - } + return offset; +} - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 5 digits, %s", - bigbuf, str); - switch ((value & 0x10) >> 4) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt with 4 digits"; - break; - } +static const ber_sequence_t TrunkTestDisconnect_set[] = { + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 4 digits, %s", - bigbuf, str); +static int +dissect_ansi_map_TrunkTestDisconnect(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TrunkTestDisconnect_set, hf_index, ett_ansi_map_TrunkTestDisconnect); - switch ((value & 0x08) >> 3) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt with 3 digits"; - break; - } + return offset; +} - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 3 digits, %s", - bigbuf, str); - switch ((value & 0x04) >> 2) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt with 2 digits"; - break; - } +static const ber_sequence_t Unblocking_set[] = { + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 2 digits, %s", - bigbuf, str); +static int +dissect_ansi_map_Unblocking(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + Unblocking_set, hf_index, ett_ansi_map_Unblocking); - switch ((value & 0x02) >> 1) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt with 1 digits"; - break; - } + return offset; +} - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 1 digits, %s", - bigbuf, str); - switch (value & 0x01) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt with no digits"; - break; - } +static const ber_sequence_t UnreliableRoamerDataDirective_set[] = { + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : No digits, %s", - bigbuf, str); +static int +dissect_ansi_map_UnreliableRoamerDataDirective(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + UnreliableRoamerDataDirective_set, hf_index, ett_ansi_map_UnreliableRoamerDataDirective); + + return offset; +} + + +static const ber_sequence_t UnsolicitedResponse_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 175, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOption_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_Destination_impl }, + { BER_CLASS_CON, 53, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extendedMSCID_impl }, + { BER_CLASS_CON, 54, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extendedSystemMyTypeCode_impl }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 34, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_systemAccessType_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_UnsolicitedResponse(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + UnsolicitedResponse_set, hf_index, ett_ansi_map_UnsolicitedResponse); + + return offset; +} + + +static const ber_sequence_t UnsolicitedResponseRes_set[] = { + { BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_accessDeniedReason_impl }, + { BER_CLASS_CON, 75, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertCode_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 243, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyName_impl }, + { BER_CLASS_CON, 80, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits1_impl }, + { BER_CLASS_CON, 81, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits2_impl }, + { BER_CLASS_CON, 82, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString1_impl }, + { BER_CLASS_CON, 83, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 299, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText2_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 53, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extendedMSCID_impl }, + { BER_CLASS_CON, 54, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extendedSystemMyTypeCode_impl }, + { BER_CLASS_CON, 288, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_legInformation_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 169, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotBillingID_impl }, + { BER_CLASS_CON, 168, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotNumber_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 101, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberString_impl }, + { BER_CLASS_CON, 245, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingPartyName_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 121, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTreatment_impl }, + { BER_CLASS_CON, 122, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTriggers_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_UnsolicitedResponseRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + UnsolicitedResponseRes_set, hf_index, ett_ansi_map_UnsolicitedResponseRes); - switch ((value & 0x80) >> 7) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt with 15 or more digits"; - break; - } + return offset; +} - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 15 digits, %s", - bigbuf, str); - switch ((value & 0x40) >> 6) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt with 14 digits"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 14 digits, %s", - bigbuf, str); +static int +dissect_ansi_map_RequiredParametersMask(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - switch ((value & 0x20) >> 5) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt with 13 digits"; - break; - } + return offset; +} +static int dissect_requiredParametersMask_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_RequiredParametersMask(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_requiredParametersMask); +} - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 13 digits, %s", - bigbuf, str); - switch ((value & 0x10) >> 4) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt with 12 digits"; - break; - } +static const ber_sequence_t ParameterRequest_set[] = { + { BER_CLASS_CON, 236, BER_FLAGS_IMPLTAG, dissect_requiredParametersMask_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 233, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_networkTMSI_impl }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 12 digits, %s", - bigbuf, str); +static int +dissect_ansi_map_ParameterRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ParameterRequest_set, hf_index, ett_ansi_map_ParameterRequest); - switch ((value & 0x08) >> 3) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt with 11 digits"; - break; - } + return offset; +} - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 11 digits, %s", - bigbuf, str); - switch ((value & 0x04) >> 2) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt with 10 digits"; - break; - } +static const value_string ansi_map_ReasonList_vals[] = { + { 0, "unknown" }, + { 1, "unable-to-configure-ISLP" }, + { 2, "iSLP-failure" }, + { 3, "service-allowed-but-facilities-not-available" }, + { 4, "service-not-allowed" }, + { 5, "no-Response-to-TMSI-assignment" }, + { 6, "required-parameters-unavailable" }, + { 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 10 digits, %s", - bigbuf, str); - switch ((value & 0x02) >> 1) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt with 9 digits"; - break; - } +static int +dissect_ansi_map_ReasonList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 9 digits, %s", - bigbuf, str); + return offset; +} +static int dissect_reasonList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ReasonList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_reasonList); +} - switch (value & 0x01) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Execute local SPINI procedures for any call attempt with 8 digits"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 8 digits, %s", - bigbuf, str); +static const ber_sequence_t ParameterRequestRes_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 242, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 233, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_networkTMSI_impl }, + { BER_CLASS_CON, 218, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reasonList_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_ParameterRequestRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ParameterRequestRes_set, hf_index, ett_ansi_map_ParameterRequestRes); - EXTRANEOUS_DATA_CHECK(len, 4); + return offset; } -static void -param_orig_trig(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - SHORT_DATA_CHECK(len, 4); - saved_offset = asn1->offset; +static int +dissect_ansi_map_NetworkTMSIExpirationTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_networkTMSIExpirationTime_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_NetworkTMSIExpirationTime(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_networkTMSIExpirationTime); +} - switch ((value & 0x80) >> 7) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any Revertive Call attempt"; break; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Revertive Call (RvtC), %s", - bigbuf, str); - switch ((value & 0x40) >> 6) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt to an unrecognized number"; break; - break; - } +static int +dissect_ansi_map_NewNetworkTMSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ansi_map_DigitsType(implicit_tag, tvb, offset, pinfo, tree, hf_index); - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Unrecognized Number (Unrec), %s", - bigbuf, str); + return offset; +} +static int dissect_newNetworkTMSI_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_NewNetworkTMSI(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_newNetworkTMSI); +} - switch ((value & 0x20) >> 5) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt outside of the current World Zone (as defined in ITU-T Rec. E.164)"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : World Zone (WZ), %s", - bigbuf, str); +static const ber_sequence_t TMSIDirective_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 234, BER_FLAGS_IMPLTAG, dissect_networkTMSIExpirationTime_impl }, + { BER_CLASS_CON, 235, BER_FLAGS_IMPLTAG, dissect_newNetworkTMSI_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 233, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_networkTMSI_impl }, + { 0, 0, 0, NULL } +}; - switch ((value & 0x10) >> 4) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any international call attempt"; - break; - } +static int +dissect_ansi_map_TMSIDirective(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TMSIDirective_set, hf_index, ett_ansi_map_TMSIDirective); - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : International (Intl), %s", - bigbuf, str); + return offset; +} - switch ((value & 0x08) >> 3) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any toll calls outside the local carrier's serving area"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Non-Local (Inter-LATA) Toll (NLTOLL/OLATA), %s", - bigbuf, str); +static const ber_sequence_t TMSIDirectiveRes_set[] = { + { BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_denyAccess_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 218, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reasonList_impl }, + { 0, 0, 0, NULL } +}; - switch ((value & 0x04) >> 2) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any local toll call attempt. Refers to intra-LATA toll within the NANP"; - break; - } +static int +dissect_ansi_map_TMSIDirectiveRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TMSIDirectiveRes_set, hf_index, ett_ansi_map_TMSIDirectiveRes); - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Local (Intra-LATA) Toll (LTOLL/ILATA), %s", - bigbuf, str); + return offset; +} - switch ((value & 0x02) >> 1) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any local call attempt"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Local, %s", - bigbuf, str); +static const ber_sequence_t NumberPortabilityRequest_set[] = { + { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 340, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_acgencountered_impl }, + { BER_CLASS_CON, 80, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits1_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { 0, 0, 0, NULL } +}; - switch (value & 0x01) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt. This overrides all other values."; - break; - } +static int +dissect_ansi_map_NumberPortabilityRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + NumberPortabilityRequest_set, hf_index, ett_ansi_map_NumberPortabilityRequest); - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : All Origination (All), %s", - bigbuf, str); + return offset; +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +static int +dissect_ansi_map_ServiceID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - switch ((value & 0x10) >> 4) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any number matching a criteria of a prior agreement"; - break; - } + return offset; +} +static int dissect_serviceID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ServiceID(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_serviceID); +} - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Prior Agreement (PA), %s", - bigbuf, str); - switch ((value & 0x08) >> 3) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any number beginning with two Pound ## digits"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Double Pound (DP), %s", - bigbuf, str); +static int +dissect_ansi_map_DataID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - switch ((value & 0x04) >> 2) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any number beginning with a Pound # digit"; - break; - } + return offset; +} +static int dissect_dataID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DataID(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_dataID); +} - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Pound, %s", - bigbuf, str); - switch ((value & 0x02) >> 1) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any number beginning with two Star ** digits"; - break; - } +static const value_string ansi_map_Change_vals[] = { + { 1, "setDataItemToDefaultValue" }, + { 2, "addDataItem" }, + { 3, "deleteDataItem" }, + { 4, "replaceDataItemWithAssociatedDataValue" }, + { 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Double Star (DS), %s", - bigbuf, str); - switch (value & 0x01) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any number beginning with a Star * digit"; - break; - } +static int +dissect_ansi_map_Change(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Star, %s", - bigbuf, str); + return offset; +} +static int dissect_change_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_Change(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_change); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - switch ((value & 0x80) >> 7) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt with 7 digits"; - break; - } +static int +dissect_ansi_map_DataValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 7 digits, %s", - bigbuf, str); + return offset; +} +static int dissect_dataValue_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DataValue(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_dataValue); +} - switch ((value & 0x40) >> 6) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt with 6 digits"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 6 digits, %s", - bigbuf, str); +static const ber_sequence_t DataAccessElement_sequence[] = { + { BER_CLASS_CON, 251, BER_FLAGS_IMPLTAG, dissect_dataID_impl }, + { BER_CLASS_CON, 248, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_change_impl }, + { BER_CLASS_CON, 256, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataValue_impl }, + { 0, 0, 0, NULL } +}; - switch ((value & 0x20) >> 5) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt with 5 digits"; - break; - } +static int +dissect_ansi_map_DataAccessElement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + DataAccessElement_sequence, hf_index, ett_ansi_map_DataAccessElement); - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 5 digits, %s", - bigbuf, str); + return offset; +} +static int dissect_dataAccessElement1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DataAccessElement(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_dataAccessElement1); +} +static int dissect_dataAccessElement2_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DataAccessElement(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_dataAccessElement2); +} - switch ((value & 0x10) >> 4) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt with 4 digits"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 4 digits, %s", - bigbuf, str); +static const ber_sequence_t DataAccessElementList_item_sequence[] = { + { BER_CLASS_CON, 249, BER_FLAGS_IMPLTAG, dissect_dataAccessElement1_impl }, + { BER_CLASS_CON, 249, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataAccessElement2_impl }, + { 0, 0, 0, NULL } +}; - switch ((value & 0x08) >> 3) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt with 3 digits"; - break; - } +static int +dissect_ansi_map_DataAccessElementList_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + DataAccessElementList_item_sequence, hf_index, ett_ansi_map_DataAccessElementList_item); - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 3 digits, %s", - bigbuf, str); + return offset; +} +static int dissect_DataAccessElementList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DataAccessElementList_item(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_DataAccessElementList_item); +} - switch ((value & 0x04) >> 2) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt with 2 digits"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 2 digits, %s", - bigbuf, str); +static const ber_sequence_t DataAccessElementList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_DataAccessElementList_item }, +}; - switch ((value & 0x02) >> 1) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt with 1 digits"; - break; - } +static int +dissect_ansi_map_DataAccessElementList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + DataAccessElementList_sequence_of, hf_index, ett_ansi_map_DataAccessElementList); - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 1 digits, %s", - bigbuf, str); + return offset; +} +static int dissect_dataAccessElementList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DataAccessElementList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_dataAccessElementList); +} - switch (value & 0x01) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt with no digits"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : No digits, %s", - bigbuf, str); - saved_offset = asn1->offset; +static int +dissect_ansi_map_TimeDateOffset(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_timeDateOffset_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TimeDateOffset(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_timeDateOffset); +} - switch ((value & 0x80) >> 7) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt with 15 or more digits"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 15 digits, %s", - bigbuf, str); - switch ((value & 0x40) >> 6) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt with 14 digits"; - break; - } +static int +dissect_ansi_map_TimeOfDay(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_timeOfDay_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TimeOfDay(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_timeOfDay); +} + + +static const ber_sequence_t ServiceRequest_set[] = { + { BER_CLASS_CON, 245, BER_FLAGS_IMPLTAG, dissect_serviceID_impl }, + { BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_accessDeniedReason_impl }, + { BER_CLASS_CON, 340, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_acgencountered_impl }, + { BER_CLASS_CON, 90, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_availabilityType_impl }, + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 243, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyName_impl }, + { BER_CLASS_CON, 80, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits1_impl }, + { BER_CLASS_CON, 81, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 162, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_conditionallyDeniedReason_impl }, + { BER_CLASS_CON, 250, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataAccessElementList_impl }, + { BER_CLASS_CON, 87, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_destinationDigits_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 88, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_RedirectionIndicator_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ServiceID_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 53, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extendedMSCID_impl }, + { BER_CLASS_CON, 306, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_featureIndicator_impl }, + { BER_CLASS_CON, 163, BER_FLAGS_OPTIONAL, dissect_groupInformation }, + { BER_CLASS_CON, 288, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_legInformation_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 169, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotBillingID_impl }, + { BER_CLASS_CON, 168, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotNumber_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 245, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingPartyName_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 19, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectionReason_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { BER_CLASS_CON, 119, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationAccessType_impl }, + { BER_CLASS_CON, 275, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_timeDateOffset_impl }, + { BER_CLASS_CON, 309, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_timeOfDay_impl }, + { BER_CLASS_CON, 123, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { BER_CLASS_CON, 279, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerType_impl }, + { BER_CLASS_CON, 280, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_winCapability_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 14 digits, %s", - bigbuf, str); +static int +dissect_ansi_map_ServiceRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ServiceRequest_set, hf_index, ett_ansi_map_ServiceRequest); + + return offset; +} + + +static const ber_sequence_t ServiceRequestRes_set[] = { + { BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_accessDeniedReason_impl }, + { BER_CLASS_CON, 128, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_actionCode_impl }, + { BER_CLASS_CON, 75, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertCode_impl }, + { BER_CLASS_CON, 130, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_announcementList_impl }, + { BER_CLASS_CON, 243, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyName_impl }, + { BER_CLASS_CON, 82, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString1_impl }, + { BER_CLASS_CON, 83, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 299, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText2_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 311, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ChargeInformation_impl }, + { BER_CLASS_CON, 88, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_RedirectionIndicator_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ServiceID_impl }, + { BER_CLASS_CON, 163, BER_FLAGS_OPTIONAL, dissect_groupInformation }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 96, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_noAnswerTime_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 101, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberString_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 394, BER_FLAGS_IMPLTAG, dissect_resumePIC_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 120, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationList_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { 0, 0, 0, NULL } +}; - switch ((value & 0x20) >> 5) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt with 13 digits"; - break; - } +static int +dissect_ansi_map_ServiceRequestRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ServiceRequestRes_set, hf_index, ett_ansi_map_ServiceRequestRes); - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 13 digits, %s", - bigbuf, str); + return offset; +} - switch ((value & 0x10) >> 4) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt with 12 digits"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 12 digits, %s", - bigbuf, str); +static const value_string ansi_map_DMH_BillingIndicator_vals[] = { + { 0, "unspecified" }, + { 0, NULL } +}; - switch ((value & 0x08) >> 3) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt with 11 digits"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 11 digits, %s", - bigbuf, str); +static int +dissect_ansi_map_DMH_BillingIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_dmd_BillingIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DMH_BillingIndicator(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_dmd_BillingIndicator); +} + + +static const ber_sequence_t AnalyzedInformation_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 123, BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { BER_CLASS_CON, 279, BER_FLAGS_IMPLTAG, dissect_triggerType_impl }, + { BER_CLASS_CON, 280, BER_FLAGS_IMPLTAG, dissect_winCapability_impl }, + { BER_CLASS_CON, 340, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_acgencountered_impl }, + { BER_CLASS_CON, 243, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyName_impl }, + { BER_CLASS_CON, 80, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits1_impl }, + { BER_CLASS_CON, 81, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 137, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_conferenceCallingIndicator_impl }, + { BER_CLASS_CON, 87, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_destinationDigits_impl }, + { BER_CLASS_CON, 312, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmd_BillingIndicator_impl }, + { BER_CLASS_CON, 311, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ChargeInformation_impl }, + { BER_CLASS_CON, 88, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_RedirectionIndicator_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 306, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_featureIndicator_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 245, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingPartyName_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { BER_CLASS_CON, 119, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationAccessType_impl }, + { BER_CLASS_CON, 275, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_timeDateOffset_impl }, + { BER_CLASS_CON, 309, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_timeOfDay_impl }, + { 0, 0, 0, NULL } +}; - switch ((value & 0x04) >> 2) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt with 10 digits"; - break; - } +static int +dissect_ansi_map_AnalyzedInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AnalyzedInformation_set, hf_index, ett_ansi_map_AnalyzedInformation); + + return offset; +} + + +static const ber_sequence_t AnalyzedInformationRes_set[] = { + { BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_accessDeniedReason_impl }, + { BER_CLASS_CON, 128, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_actionCode_impl }, + { BER_CLASS_CON, 130, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_announcementList_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 137, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_conferenceCallingIndicator_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 88, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_RedirectionIndicator_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ServiceID_impl }, + { BER_CLASS_CON, 96, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_noAnswerTime_impl }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 394, BER_FLAGS_IMPLTAG, dissect_resumePIC_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 120, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationList_impl }, + { BER_CLASS_CON, 122, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTriggers_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 10 digits, %s", - bigbuf, str); +static int +dissect_ansi_map_AnalyzedInformationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AnalyzedInformationRes_set, hf_index, ett_ansi_map_AnalyzedInformationRes); - switch ((value & 0x02) >> 1) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt with 9 digits"; - break; - } + return offset; +} - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 9 digits, %s", - bigbuf, str); - switch (value & 0x01) - { - case 0x00: str = "Trigger is not active"; break; - default: - str = "Launch an Origination Request for any call attempt with 8 digits"; - break; - } +static const value_string ansi_map_FailureType_vals[] = { + { 1, "callAbandoned" }, + { 2, "resourceDisconnect" }, + { 3, "failureAtMSC" }, + { 4, "sSFTExpiration" }, + { 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : 8 digits, %s", - bigbuf, str); - EXTRANEOUS_DATA_CHECK(len, 4); -} +static int +dissect_ansi_map_FailureType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); -static void -param_trig_cap(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; + return offset; +} +static int dissect_failureType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_FailureType(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_failureType); +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - switch ((value & 0x80) >> 7) - { - case 0x00: str = "O No Answer (ONA) cannot be armed"; break; - default: - str = "O No Answer (ONA) can be armed"; - break; - } +static int +dissect_ansi_map_FailureCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); + return offset; +} +static int dissect_failureCause_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_FailureCause(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_failureCause); +} - switch ((value & 0x40) >> 6) - { - case 0x00: str = "O Disconnect (ODISC) cannot be armed"; break; - default: - str = "O Disconnect (ODISC) can be armed"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); +static const ber_sequence_t ConnectionFailureReport_set[] = { + { BER_CLASS_CON, 260, BER_FLAGS_IMPLTAG, dissect_failureType_impl }, + { BER_CLASS_CON, 387, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_failureCause_impl }, + { 0, 0, 0, NULL } +}; - switch ((value & 0x20) >> 5) - { - case 0x00: str = "O Answer (OANS) cannot be armed"; break; - default: - str = "O Answer (OANS) can be armed"; - break; - } +static int +dissect_ansi_map_ConnectionFailureReport(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ConnectionFailureReport_set, hf_index, ett_ansi_map_ConnectionFailureReport); - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); + return offset; +} - switch ((value & 0x10) >> 4) - { - case 0x00: str = "Origination Attempt Authorized (OAA) cannot be armed"; break; - default: - str = "Origination Attempt Authorized (OAA) can be armed"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); +static const ber_sequence_t ConnectResource_set[] = { + { BER_CLASS_CON, 87, BER_FLAGS_IMPLTAG, dissect_destinationDigits_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_outingDigits_impl }, + { 0, 0, 0, NULL } +}; - switch ((value & 0x08) >> 3) - { - case 0x00: str = "Revertive Call trigger (RvtC) cannot be armed"; break; - default: - str = "Revertive Call trigger (RvtC) can be armed"; - break; - } +static int +dissect_ansi_map_ConnectResource(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ConnectResource_set, hf_index, ett_ansi_map_ConnectResource); + + return offset; +} + + +static const ber_sequence_t FacilitySelectedAndAvailable_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 123, BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { BER_CLASS_CON, 279, BER_FLAGS_IMPLTAG, dissect_triggerType_impl }, + { BER_CLASS_CON, 280, BER_FLAGS_IMPLTAG, dissect_winCapability_impl }, + { BER_CLASS_CON, 340, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_acgencountered_impl }, + { BER_CLASS_CON, 243, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyName_impl }, + { BER_CLASS_CON, 80, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits1_impl }, + { BER_CLASS_CON, 81, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 163, BER_FLAGS_OPTIONAL, dissect_groupInformation }, + { BER_CLASS_CON, 288, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_legInformation_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 169, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotBillingID_impl }, + { BER_CLASS_CON, 168, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotNumber_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 245, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingPartyName_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { BER_CLASS_CON, 119, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationAccessType_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); +static int +dissect_ansi_map_FacilitySelectedAndAvailable(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + FacilitySelectedAndAvailable_set, hf_index, ett_ansi_map_FacilitySelectedAndAvailable); + + return offset; +} + + +static const ber_sequence_t FacilitySelectedAndAvailableRes_set[] = { + { BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_accessDeniedReason_impl }, + { BER_CLASS_CON, 128, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_actionCode_impl }, + { BER_CLASS_CON, 75, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_alertCode_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 311, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ChargeInformation_impl }, + { BER_CLASS_CON, 88, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_RedirectionIndicator_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ServiceID_impl }, + { BER_CLASS_CON, 96, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_noAnswerTime_impl }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 394, BER_FLAGS_IMPLTAG, dissect_resumePIC_impl }, + { BER_CLASS_CON, 122, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTriggers_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { 0, 0, 0, NULL } +}; - switch ((value & 0x04) >> 2) - { - case 0x00: str = "All Calls trigger (All) cannot be armed"; break; - default: - str = "All Calls trigger (All) can be armed"; - break; - } +static int +dissect_ansi_map_FacilitySelectedAndAvailableRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + FacilitySelectedAndAvailableRes_set, hf_index, ett_ansi_map_FacilitySelectedAndAvailableRes); - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); + return offset; +} - switch ((value & 0x02) >> 1) - { - case 0x00: str = "K-digit triggers (K-digit) cannot be armed"; break; - default: - str = "K-digit triggers (K-digit) can be armed"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); - switch (value & 0x01) - { - case 0x00: str = "Introducing Star/Pound triggers (INIT) cannot be armed"; break; - default: - str = "Introducing Star/Pound triggers (INIT) can be armed"; - break; - } +static int +dissect_ansi_map_DatabaseKey(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); + return offset; +} +static int dissect_databaseKey_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DatabaseKey(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_databaseKey); +} - if (len == 1) return; - saved_offset = asn1->offset; +static const ber_sequence_t ServiceDataAccessElement_sequence[] = { + { BER_CLASS_CON, 250, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataAccessElementList_impl }, + { BER_CLASS_CON, 246, BER_FLAGS_IMPLTAG, dissect_serviceID_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_ServiceDataAccessElement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ServiceDataAccessElement_sequence, hf_index, ett_ansi_map_ServiceDataAccessElement); - switch ((value & 0x80) >> 7) - { - case 0x00: str = "O Called Party Busy (OBSY) cannot be armed"; break; - default: - str = "O Called Party Busy (OBSY) can be armed"; - break; - } + return offset; +} +static int dissect_ServiceDataAccessElementList_item_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ServiceDataAccessElement(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_ServiceDataAccessElementList_item); +} - other_decode_bitfield_value(bigbuf, value, 0x80, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); - switch ((value & 0x40) >> 6) - { - case 0x00: str = "Called Routing Address Available (CdRAA) cannot be armed"; break; - default: - str = "Called Routing Address Available (CdRAA) can be armed"; - break; - } +static const ber_sequence_t ServiceDataAccessElementList_sequence_of[1] = { + { BER_CLASS_CON, 398, BER_FLAGS_IMPLTAG, dissect_ServiceDataAccessElementList_item_impl }, +}; - other_decode_bitfield_value(bigbuf, value, 0x40, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); +static int +dissect_ansi_map_ServiceDataAccessElementList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + ServiceDataAccessElementList_sequence_of, hf_index, ett_ansi_map_ServiceDataAccessElementList); - switch ((value & 0x20) >> 5) - { - case 0x00: str = "Initial Termination (IT) cannot be armed"; break; - default: - str = "Initial Termination (IT) can be armed"; - break; - } + return offset; +} +static int dissect_serviceDataAccessElementList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ServiceDataAccessElementList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_serviceDataAccessElementList); +} - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); - switch ((value & 0x10) >> 4) - { - case 0x00: str = "Calling Routing Address Available (CgRAA) cannot be armed"; break; - default: - str = "Calling Routing Address Available (CgRAA) can be armed"; - break; - } +static const value_string ansi_map_AllOrNone_vals[] = { + { 0, "notUsed" }, + { 1, "allChangesMustSucceedOrNoneShouldBeApplied" }, + { 2, "treatEachChangeIndependently" }, + { 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); - switch ((value & 0x08) >> 3) - { - case 0x00: str = "Advanced Termination trigger (AT) cannot be armed"; break; - default: - str = "Advanced Termination trigger (AT) can be armed"; - break; - } +static int +dissect_ansi_map_AllOrNone(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); + return offset; +} +static int dissect_allOrNone_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AllOrNone(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_allOrNone); +} - switch ((value & 0x04) >> 2) - { - case 0x00: str = "Prior Agreement trigger (PA) cannot be armed"; break; - default: - str = "Prior Agreement trigger (PA) can be armed"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); +static const ber_sequence_t ModificationRequest_sequence[] = { + { BER_CLASS_CON, 399, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceDataAccessElementList_impl }, + { BER_CLASS_CON, 247, BER_FLAGS_IMPLTAG, dissect_allOrNone_impl }, + { 0, 0, 0, NULL } +}; - switch ((value & 0x02) >> 1) - { - case 0x00: str = "Unrecognized Number trigger (Unrec) cannot be armed"; break; - default: - str = "Unrecognized Number trigger (Unrec) can be armed"; - break; - } +static int +dissect_ansi_map_ModificationRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ModificationRequest_sequence, hf_index, ett_ansi_map_ModificationRequest); - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); + return offset; +} +static int dissect_ModificationRequestList_item_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ModificationRequest(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_ModificationRequestList_item); +} - switch (value & 0x01) - { - case 0x00: str = "Call Type triggers (CT) cannot be armed"; break; - default: - str = "Call Type triggers (CT) can be armed"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); +static const ber_sequence_t ModificationRequestList_sequence_of[1] = { + { BER_CLASS_CON, 390, BER_FLAGS_IMPLTAG, dissect_ModificationRequestList_item_impl }, +}; - if (len == 2) return; +static int +dissect_ansi_map_ModificationRequestList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + ModificationRequestList_sequence_of, hf_index, ett_ansi_map_ModificationRequestList); - saved_offset = asn1->offset; + return offset; +} +static int dissect_modificationRequestList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ModificationRequestList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_modificationRequestList); +} - asn1_int32_value_decode(asn1, 1, &value); - other_decode_bitfield_value(bigbuf, value, 0xe0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); +static const ber_sequence_t Modify_set[] = { + { BER_CLASS_CON, 252, BER_FLAGS_IMPLTAG, dissect_databaseKey_impl }, + { BER_CLASS_CON, 391, BER_FLAGS_IMPLTAG, dissect_modificationRequestList_impl }, + { 0, 0, 0, NULL } +}; - switch ((value & 0x10) >> 4) - { - case 0x00: str = "T Disconnect (TDISC) cannot be armed"; break; - default: - str = "T Disconnect (TDISC) can be armed"; - break; - } +static int +dissect_ansi_map_Modify(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + Modify_set, hf_index, ett_ansi_map_Modify); - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); + return offset; +} - switch ((value & 0x08) >> 3) - { - case 0x00: str = "T Answer (TANS) cannot be armed"; break; - default: - str = "T Answer (TANS) can be armed"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); +static const value_string ansi_map_DataResult_vals[] = { + { 0, "not-used" }, + { 1, "successful" }, + { 2, "unsuccessful-unspecified" }, + { 3, "unsuccessful-no-default-value-available" }, + { 4, "reserved" }, + { 0, NULL } +}; - switch ((value & 0x04) >> 2) - { - case 0x00: str = "T No Answer trigger (TNA) cannot be armed"; break; - default: - str = "T No Answer trigger (TNA) can be armed"; - break; - } - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); +static int +dissect_ansi_map_DataResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - switch ((value & 0x02) >> 1) - { - case 0x00: str = "T Busy trigger (TBusy) cannot be armed"; break; - default: - str = "T Busy trigger (TBusy) can be armed"; - break; - } + return offset; +} +static int dissect_dataResult_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DataResult(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_dataResult); +} - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); - switch (value & 0x01) - { - case 0x00: str = "Terminating Resource Available triggers (TRA) cannot be armed"; break; - default: - str = "Terminating Resource Available triggers (TRA) can be armed"; - break; - } +static const ber_sequence_t DataUpdateResult_sequence[] = { + { BER_CLASS_CON, 251, BER_FLAGS_IMPLTAG, dissect_dataID_impl }, + { BER_CLASS_CON, 253, BER_FLAGS_IMPLTAG, dissect_dataResult_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); +static int +dissect_ansi_map_DataUpdateResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + DataUpdateResult_sequence, hf_index, ett_ansi_map_DataUpdateResult); - EXTRANEOUS_DATA_CHECK(len, 3); + return offset; +} +static int dissect_DataUpdateResultList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DataUpdateResult(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_DataUpdateResultList_item); } -static void -param_sys_cap(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); +static const ber_sequence_t DataUpdateResultList_sequence_of[1] = { + { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_DataUpdateResultList_item }, +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_DataUpdateResultList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + DataUpdateResultList_sequence_of, hf_index, ett_ansi_map_DataUpdateResultList); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_dataUpdateResultList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_DataUpdateResultList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_dataUpdateResultList); +} - other_decode_bitfield_value(bigbuf, value, 0xc0, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : Reserved", - bigbuf); - switch ((value & 0x20) >> 5) - { - case 0x00: str = "DP is not supported by the system"; break; - default: - str = "DP is supported by the system"; - break; - } +static const ber_sequence_t ServiceDataResult_sequence[] = { + { BER_CLASS_CON, 255, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataUpdateResultList_impl }, + { BER_CLASS_CON, 246, BER_FLAGS_IMPLTAG, dissect_serviceID_impl }, + { 0, 0, 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x20, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); +static int +dissect_ansi_map_ServiceDataResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ServiceDataResult_sequence, hf_index, ett_ansi_map_ServiceDataResult); - switch ((value & 0x10) >> 4) - { - case 0x00: str = "SSD is not shared with the system for the indicated MS"; break; - default: - str = "SSD is shared with the system for the indicated MS"; - break; - } + return offset; +} +static int dissect_ServiceDataResultList_item_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ServiceDataResult(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_ServiceDataResultList_item); +} - other_decode_bitfield_value(bigbuf, value, 0x10, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); - switch ((value & 0x08) >> 3) - { - case 0x00: str = "System cannot execute CAVE algorithm"; break; - default: - str = "System can execute CAVE algorithm"; - break; - } +static const ber_sequence_t ServiceDataResultList_sequence_of[1] = { + { BER_CLASS_CON, 272, BER_FLAGS_IMPLTAG, dissect_ServiceDataResultList_item_impl }, +}; - other_decode_bitfield_value(bigbuf, value, 0x08, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); +static int +dissect_ansi_map_ServiceDataResultList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + ServiceDataResultList_sequence_of, hf_index, ett_ansi_map_ServiceDataResultList); - switch ((value & 0x04) >> 2) - { - case 0x00: str = "Voice Privacy is not supported"; break; - default: - str = "Voice Privacy is supported"; - break; - } + return offset; +} +static int dissect_serviceDataResultList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ServiceDataResultList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_serviceDataResultList); +} - other_decode_bitfield_value(bigbuf, value, 0x04, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); - switch ((value & 0x02) >> 1) - { - case 0x00: str = "SME is not supported"; break; - default: - str = "SME is supported"; - break; - } +static const value_string ansi_map_ModificationResult_vals[] = { + { 253, "dataResult" }, + { 273, "serviceDataResultList" }, + { 0, NULL } +}; - other_decode_bitfield_value(bigbuf, value, 0x02, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); +static const ber_choice_t ModificationResult_choice[] = { + { 253, BER_CLASS_CON, 253, BER_FLAGS_IMPLTAG, dissect_dataResult_impl }, + { 273, BER_CLASS_CON, 273, BER_FLAGS_IMPLTAG, dissect_serviceDataResultList_impl }, + { 0, 0, 0, 0, NULL } +}; - switch (value & 0x01) - { - case 0x00: str = "Authentication parameters were not requested"; break; - default: - str = "Authentication parameters were requested"; - break; - } +static int +dissect_ansi_map_ModificationResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + ModificationResult_choice, hf_index, ett_ansi_map_ModificationResult, + NULL); - other_decode_bitfield_value(bigbuf, value, 0x01, 8); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s : %s", - bigbuf, str); + return offset; +} +static int dissect_ModificationResultList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ModificationResult(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_ModificationResultList_item); } -static void -param_act_code(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; +static const ber_sequence_t ModificationResultList_sequence_of[1] = { + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ModificationResultList_item }, +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_ModificationResultList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset, + ModificationResultList_sequence_of, hf_index, ett_ansi_map_ModificationResultList); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Continue processing"; break; - case 2: str = "Disconnect call"; break; - case 3: str = "Disconnect call leg"; break; - case 4: str = "Conference calling drop last party"; break; - case 5: str = "Bridge call leg(s) to conference call"; break; - case 6: str = "Drop call leg on busy or routing failure"; break; - case 7: str = "Disconnect all call legs"; break; - case 8: str = "Attach MSC to OTAF"; break; - case 9: str = "Initiate Registration Notification"; break; - case 10: str = "Generate Public Encryption values"; break; - case 11: str = "Generate A-Key"; break; - case 12: str = "Perform SSD Update procedure"; break; - case 13: str = "Perform Re-authentication procedure"; break; - case 14: str = "Release TRN"; break; - case 15: str = "Commit A-key"; break; - case 16: str = "Release Resources"; break; - case 17: str = "Record NEWMSID"; break; - case 18: str = "Allocate Resources"; break; - case 19: str = "Generate Authentication Signature"; break; - case 20: str = "Release leg and redirect subscriber"; break; - case 21: str = "Do Not Wait For MS User Level Response"; break; - default: - if ((value >= 22) && (value <= 95)) { str = "Reserved, treat as Continue processing"; } - if ((value >= 96) && (value <= 127)) { str = "Reserved for protocol extension, treat as Continue processing"; } - if ((value >= 128) && (value <= 223)) { str = "Reserved, treat as Disconnect call"; } - else { str = "Reserved for protocol extension, treat as Disconnect call"; } - break; - } + return offset; +} +static int dissect_modificationResultList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ModificationResultList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_modificationResultList); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Action Code, %s (%u)", - str, - value); - EXTRANEOUS_DATA_CHECK(len, 1); -} +static const ber_sequence_t ModifyRes_set[] = { + { BER_CLASS_CON, 392, BER_FLAGS_IMPLTAG, dissect_modificationResultList_impl }, + { 0, 0, 0, NULL } +}; -static void -param_border_acc(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +static int +dissect_ansi_map_ModifyRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ModifyRes_set, hf_index, ett_ansi_map_ModifyRes); - EXACT_DATA_CHECK(len, 1); + return offset; +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); +static const ber_sequence_t Search_set[] = { + { BER_CLASS_CON, 252, BER_FLAGS_IMPLTAG, dissect_databaseKey_impl }, + { BER_CLASS_CON, 399, BER_FLAGS_IMPLTAG, dissect_serviceDataAccessElementList_impl }, + { 0, 0, 0, NULL } +}; - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Border Cell Access"; break; - default: - if ((value >= 2) && (value <= 223)) { str = "Reserved, treat as Border Cell Access"; } - else { str = "Reserved for protocol extension, treat as Border Cell Access"; } - break; - } +static int +dissect_ansi_map_Search(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + Search_set, hf_index, ett_ansi_map_Search); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Indication, %s (%u)", - str, - value); + return offset; } -static void -param_avail_type(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; +static const ber_sequence_t SearchRes_set[] = { + { BER_CLASS_CON, 399, BER_FLAGS_IMPLTAG, dissect_serviceDataAccessElementList_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_SearchRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SearchRes_set, hf_index, ett_ansi_map_SearchRes); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Unspecified MS inactivity type"; break; - default: - if ((value >= 2) && (value <= 223)) { str = "Reserved, treat as Unspecified"; } - else { str = "Reserved for protocol extension, treat as Unspecified"; } - break; - } + return offset; +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); - EXTRANEOUS_DATA_CHECK(len, 1); -} -static void -param_can_type(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; +static int +dissect_ansi_map_PrivateSpecializedResource(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - saved_offset = asn1->offset; + return offset; +} +static int dissect_privateSpecializedResource_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PrivateSpecializedResource(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_privateSpecializedResource); +} - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Serving System Option. The serving system may discontinue a call or service in progress at its option."; break; - case 2: str = "Report In Call. The serving system shall continue to provide service when a call or service is in progress and just report its incidence."; break; - case 3: str = "Discontinue. The serving system shall discontinue any call or service in progress, regardless of the MS's qualification, profile or authentication."; break; - default: - if ((value >= 4) && (value <= 223)) { str = "Reserved, treat as Serving System Option"; } - else { str = "Reserved for protocol extension, treat as Serving System Option"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - str); +static int +dissect_ansi_map_SpecializedResource(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; +} +static int dissect_specializedResource_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SpecializedResource(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_specializedResource); } -static void -param_can_den(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); +static const ber_sequence_t SeizeResource_set[] = { + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 383, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_privateSpecializedResource_impl }, + { BER_CLASS_CON, 274, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_specializedResource_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_SeizeResource(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SeizeResource_set, hf_index, ett_ansi_map_SeizeResource); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Multiple Access"; break; - case 2: str = "Busy"; break; - default: - if ((value >= 3) && (value <= 223)) { str = "Reserved, treat as Multiple Access"; } - else { str = "Reserved for protocol extension, treat as Multiple Access"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Indication, %s (%u)", - str, - value); +static const ber_sequence_t SeizeResourceRes_set[] = { + { BER_CLASS_CON, 87, BER_FLAGS_IMPLTAG, dissect_destinationDigits_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_SeizeResourceRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SeizeResourceRes_set, hf_index, ett_ansi_map_SeizeResourceRes); + + return offset; } -static void -param_acc_den(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 1); - saved_offset = asn1->offset; +static int +dissect_ansi_map_ScriptName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} +static int dissect_scriptName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ScriptName(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_scriptName); +} - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Unassigned directory number"; break; - case 2: str = "Inactive"; break; - case 3: str = "Busy"; break; - case 4: str = "Termination denied"; break; - case 5: str = "No Page response"; break; - case 6: str = "Unavailable"; break; - case 7: str = "Service Rejected by MS"; break; - case 8: str = "Service Rejected by the System"; break; - case 9: str = "Service Type Mismatch"; break; - case 10: str = "Service Denied"; break; - case 11: str = "Call Rejected"; break; - default: - if ((value >= 12) && (value <= 223)) { str = "Reserved, treat as Termination denied"; } - else { str = "Reserved for protocol extension, treat as Termination denied"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Access Denied Reason, %s (%u)", - str, - value); + +static int +dissect_ansi_map_ScriptArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_scriptArgument_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ScriptArgument(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_scriptArgument); } -static void -param_sms_acc_den_reason(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; +static const ber_sequence_t ExecuteScript_sequence[] = { + { BER_CLASS_CON, 396, BER_FLAGS_IMPLTAG, dissect_scriptName_impl }, + { BER_CLASS_CON, 395, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_scriptArgument_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_ExecuteScript(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset, + ExecuteScript_sequence, hf_index, ett_ansi_map_ExecuteScript); - switch (value) - { - case 0: str = "Not used"; break; - case 1: str = "Denied"; break; - case 2: str = "Postponed"; break; - case 3: str = "Unavailable"; break; - case 4: str = "Invalid"; break; - default: - if ((value >= 5) && (value <= 63)) { str = "Reserved, treat as Denied"; } - else if ((value >= 64) && (value <= 127)) { str = "Reserved, treat as Postponed"; } - else if ((value >= 128) && (value <= 223)) { str = "Reserved, treat as Unavailable"; } - else { str = "Reserved for protocol extension, treat as Unavailable"; } - break; - } + return offset; +} +static int dissect_executeScript_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ExecuteScript(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_executeScript); +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Access Denied Reason, %s (%u)", - str, - value); - EXTRANEOUS_DATA_CHECK(len, 1); +static const ber_sequence_t SRFDirective_set[] = { + { BER_CLASS_CON, 130, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_announcementList_impl }, + { BER_CLASS_CON, 139, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digitCollectionControl_impl }, + { BER_CLASS_CON, 386, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_executeScript_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_SRFDirective(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SRFDirective_set, hf_index, ett_ansi_map_SRFDirective); + + return offset; } -static void -param_sms_bd(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - bd_tvb = tvb_new_subset(asn1->tvb, asn1->offset, len, len); - proto_tree_add_text(tree, asn1->tvb, - asn1->offset, len, - "Parameter Data"); +static int +dissect_ansi_map_ScriptResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - asn1->offset += len; + return offset; +} +static int dissect_scriptResult_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ScriptResult(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_scriptResult); } -static void -param_sms_cause(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - const gchar *str = NULL; - saved_offset = asn1->offset; +static const ber_sequence_t SRFDirectiveRes_set[] = { + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 397, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_scriptResult_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_SRFDirectiveRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SRFDirectiveRes_set, hf_index, ett_ansi_map_SRFDirectiveRes); + + return offset; +} + + +static const ber_sequence_t TBusy_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 123, BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { BER_CLASS_CON, 279, BER_FLAGS_IMPLTAG, dissect_triggerType_impl }, + { BER_CLASS_CON, 280, BER_FLAGS_IMPLTAG, dissect_winCapability_impl }, + { BER_CLASS_CON, 340, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_acgencountered_impl }, + { BER_CLASS_CON, 80, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits1_impl }, + { BER_CLASS_CON, 81, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 163, BER_FLAGS_OPTIONAL, dissect_groupInformation }, + { BER_CLASS_CON, 288, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_legInformation_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 169, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotBillingID_impl }, + { BER_CLASS_CON, 168, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotNumber_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 19, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectionReason_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { BER_CLASS_CON, 119, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationAccessType_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_TBusy(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TBusy_set, hf_index, ett_ansi_map_TBusy); + + return offset; +} + + +static const ber_sequence_t TBusyRes_set[] = { + { BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_accessDeniedReason_impl }, + { BER_CLASS_CON, 128, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_actionCode_impl }, + { BER_CLASS_CON, 130, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_announcementList_impl }, + { BER_CLASS_CON, 82, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString1_impl }, + { BER_CLASS_CON, 83, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString2_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 88, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_RedirectionIndicator_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ServiceID_impl }, + { BER_CLASS_CON, 163, BER_FLAGS_OPTIONAL, dissect_groupInformation }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 168, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotNumber_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 394, BER_FLAGS_IMPLTAG, dissect_resumePIC_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 120, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationList_impl }, + { BER_CLASS_CON, 122, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTriggers_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_TBusyRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TBusyRes_set, hf_index, ett_ansi_map_TBusyRes); + + return offset; +} + + +static const ber_sequence_t TNoAnswer_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 123, BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { BER_CLASS_CON, 279, BER_FLAGS_IMPLTAG, dissect_triggerType_impl }, + { BER_CLASS_CON, 280, BER_FLAGS_IMPLTAG, dissect_winCapability_impl }, + { BER_CLASS_CON, 340, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_acgencountered_impl }, + { BER_CLASS_CON, 80, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits1_impl }, + { BER_CLASS_CON, 81, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 163, BER_FLAGS_OPTIONAL, dissect_groupInformation }, + { BER_CLASS_CON, 288, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_legInformation_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 169, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotBillingID_impl }, + { BER_CLASS_CON, 168, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotNumber_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 102, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingSubaddress_impl }, + { BER_CLASS_CON, 19, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectionReason_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { BER_CLASS_CON, 119, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationAccessType_impl }, + { 0, 0, 0, NULL } +}; - switch (value) - { - case 0: str = "Address vacant"; break; - case 1: str = "Address translation failure"; break; - case 2: str = "Network resource shortage"; break; - case 3: str = "Network failure"; break; - case 4: str = "Invalid Teleservice ID"; break; - case 5: str = "Other network problem"; break; - case 6: str = "Unsupported network interface"; break; - case 32: str = "No page response"; break; - case 33: str = "Destination busy"; break; - case 34: str = "No acknowledgement"; break; - case 35: str = "Destination resource shortage"; break; - case 36: str = "SMS delivery postponed"; break; - case 37: str = "Destination out of service"; break; - case 38: str = "Destination no longer at this address"; break; - case 39: str = "Other terminal problem"; break; - case 64: str = "Radio interface resource shortage"; break; - case 65: str = "Radio interface incompatibility"; break; - case 66: str = "Other radio interface problem"; break; - case 67: str = "Unsupported Base Station Capability"; break; - case 96: str = "Encoding problem"; break; - case 97: str = "Service origination denied"; break; - case 98: str = "Service termination denied"; break; - case 99: str = "Supplementary service not supported"; break; - case 100: str = "Service not supported"; break; - case 101: str = "Reserved"; break; - case 102: str = "Missing expected parameter"; break; - case 103: str = "Missing mandatory parameter"; break; - case 104: str = "Unrecognized parameter value"; break; - case 105: str = "Unexpected parameter value"; break; - case 106: str = "User Data size error"; break; - case 107: str = "Other general problems"; break; - case 108: str = "Session not active"; break; - default: - if ((value >= 7) && (value <= 31)) { str = "Reserved, treat as Other network problem"; } - else if ((value >= 40) && (value <= 47)) { str = "Reserved, treat as Other terminal problem"; } - else if ((value >= 48) && (value <= 63)) { str = "Reserved, treat as SMS delivery postponed"; } - else if ((value >= 68) && (value <= 95)) { str = "Reserved, treat as Other radio interface problem"; } - else if ((value >= 109) && (value <= 223)) { str = "Reserved, treat as Other general problems"; } - else { str = "Reserved for protocol extension, treat as Other general problems"; } - break; - } +static int +dissect_ansi_map_TNoAnswer(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TNoAnswer_set, hf_index, ett_ansi_map_TNoAnswer); + + return offset; +} + + +static const ber_sequence_t TNoAnswerRes_set[] = { + { BER_CLASS_CON, 20, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_accessDeniedReason_impl }, + { BER_CLASS_CON, 128, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_actionCode_impl }, + { BER_CLASS_CON, 130, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_announcementList_impl }, + { BER_CLASS_CON, 82, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString1_impl }, + { BER_CLASS_CON, 83, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberString2_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 88, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_RedirectionIndicator_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ServiceID_impl }, + { BER_CLASS_CON, 163, BER_FLAGS_OPTIONAL, dissect_groupInformation }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 168, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pilotNumber_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 394, BER_FLAGS_IMPLTAG, dissect_resumePIC_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 120, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationList_impl }, + { BER_CLASS_CON, 122, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTriggers_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_TNoAnswerRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TNoAnswerRes_set, hf_index, ett_ansi_map_TNoAnswerRes); + + return offset; +} + + +static const ber_sequence_t ChangeFacilities_set[] = { + { BER_CLASS_CON, 67, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaPrivateLongCodeMask_impl }, + { BER_CLASS_CON, 174, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceConfigurationRecord_impl }, + { BER_CLASS_CON, 215, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataKey_impl }, + { BER_CLASS_CON, 216, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataPrivacyParameters_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 217, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ilspInformation_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 40, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariable_impl }, + { BER_CLASS_CON, 220, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBandwidth_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { BER_CLASS_CON, 48, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voicePrivacyMask_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "%s (%u)", - str, - value); +static int +dissect_ansi_map_ChangeFacilities(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ChangeFacilities_set, hf_index, ett_ansi_map_ChangeFacilities); - EXTRANEOUS_DATA_CHECK(len, 1); + return offset; } -static void -param_cdma_soci(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - saved_offset = asn1->offset; +static const ber_sequence_t ChangeFacilitiesRes_set[] = { + { BER_CLASS_CON, 218, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reasonList_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &value); +static int +dissect_ansi_map_ChangeFacilitiesRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ChangeFacilitiesRes_set, hf_index, ett_ansi_map_ChangeFacilitiesRes); + + return offset; +} - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Value %u", - value); - EXTRANEOUS_DATA_CHECK(len, 1); + +static int +dissect_ansi_map_TDMAVoiceMode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_tdmaVoiceMode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_TDMAVoiceMode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_tdmaVoiceMode); } -static void -param_int(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - if (len > 4) - { - proto_tree_add_text(tree, asn1->tvb, - asn1->offset, len, "Long Data (?)"); - asn1->offset += len; - return; - } +static const ber_sequence_t ChangeService_set[] = { + { BER_CLASS_CON, 174, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceConfigurationRecord_impl }, + { BER_CLASS_CON, 176, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOptionList_impl }, + { BER_CLASS_CON, 214, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_changeServiceAttributes_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 217, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ilspInformation_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 220, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaBandwidth_impl }, + { BER_CLASS_CON, 222, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaDataMode_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { BER_CLASS_CON, 223, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaVoiceMode_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_ChangeService(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ChangeService_set, hf_index, ett_ansi_map_ChangeService); + + return offset; +} + + +static const ber_sequence_t ChangeServiceRes_set[] = { + { BER_CLASS_CON, 67, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaPrivateLongCodeMask_impl }, + { BER_CLASS_CON, 174, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceConfigurationRecord_impl }, + { BER_CLASS_CON, 176, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOptionList_impl }, + { BER_CLASS_CON, 214, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_changeServiceAttributes_impl }, + { BER_CLASS_CON, 215, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataKey_impl }, + { BER_CLASS_CON, 216, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dataPrivacyParameters_impl }, + { BER_CLASS_CON, 40, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariable_impl }, + { BER_CLASS_CON, 218, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reasonList_impl }, + { BER_CLASS_CON, 178, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaServiceCode_impl }, + { BER_CLASS_CON, 48, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voicePrivacyMask_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, len, &value); +static int +dissect_ansi_map_ChangeServiceRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ChangeServiceRes_set, hf_index, ett_ansi_map_ChangeServiceRes); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Value %u", - value); + return offset; } -static void -param_pc_ssn(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value, b1, b2, b3, b4; - guint saved_offset; - const gchar *str = NULL; - EXACT_DATA_CHECK(len, 5); +static const ber_sequence_t MessageDirective_set[] = { + { BER_CLASS_CON, 92, BER_FLAGS_IMPLTAG, dissect_messageWaitingNotificationCount_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_MessageDirective(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + MessageDirective_set, hf_index, ett_ansi_map_MessageDirective); - asn1_int32_value_decode(asn1, 1, &value); + return offset; +} - switch (value) - { - case 0: str = "Not specified"; break; - case 1: str = "Serving MSC"; break; - case 2: str = "Home MSC"; break; - case 3: str = "Gateway MSC"; break; - case 4: str = "HLR"; break; - case 5: str = "VLR"; break; - case 6: str = "EIR (reserved)"; break; - case 7: str = "AC"; break; - case 8: str = "Border MSC"; break; - case 9: str = "Originating MSC"; break; - default: - if ((value >= 10) && (value <= 223)) { str = "Reserved, treat as Not specified"; } - else { str = "Reserved for protocol extension, treat as Not specified"; } - break; - } - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Type (%u) %s", - value, - str); +static const ber_sequence_t BulkDisconnection_set[] = { + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 275, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_timeDateOffset_impl }, + { BER_CLASS_CON, 309, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_timeOfDay_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { 0, 0, 0, NULL } +}; - asn1_int32_value_decode(asn1, 1, &b1); - asn1_int32_value_decode(asn1, 1, &b2); - asn1_int32_value_decode(asn1, 1, &b3); - asn1_int32_value_decode(asn1, 1, &b4); +static int +dissect_ansi_map_BulkDisconnection(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + BulkDisconnection_set, hf_index, ett_ansi_map_BulkDisconnection); + + return offset; +} + + +static const ber_sequence_t CallControlDirective_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 128, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_actionCode_impl }, + { BER_CLASS_CON, 130, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_announcementList_impl }, + { BER_CLASS_CON, 244, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_displayText_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 311, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ChargeInformation_impl }, + { BER_CLASS_CON, 88, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_RedirectionIndicator_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 120, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationList_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Point Code %u-%u-%u SSN %u", - b3, b2, b1, b4); +static int +dissect_ansi_map_CallControlDirective(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + CallControlDirective_set, hf_index, ett_ansi_map_CallControlDirective); + + return offset; } -static void -param_lai(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string _U_, int string_len _U_) -{ - gint32 value; - guint saved_offset; - EXACT_DATA_CHECK(len, 2); +static const value_string ansi_map_CallStatus_vals[] = { + { 0, "not-used" }, + { 1, "call-Setup-in-Progress" }, + { 2, "called-Party" }, + { 3, "locally-Allowed-Call-No-Action" }, + { 0, NULL } +}; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 2, &value); +static int +dissect_ansi_map_CallStatus(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "LAI %u (0x%04x)", - value, - value); + return offset; +} +static int dissect_callStatus_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CallStatus(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_callStatus); } -static void -param_list(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) -{ - guint saved_offset; - guint num_parms; - - num_parms = 0; - saved_offset = asn1->offset; - while (len > (asn1->offset - saved_offset)) - { - num_parms++; +static const ber_sequence_t CallControlDirectiveRes_set[] = { + { BER_CLASS_CON, 310, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callStatus_impl }, + { 0, 0, 0, NULL } +}; - if (!dissect_ansi_param(asn1, tree)) - { - proto_tree_add_text(tree, - asn1->tvb, asn1->offset, len - (asn1->offset - saved_offset), - "Unknown Parameter Data"); +static int +dissect_ansi_map_CallControlDirectiveRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + CallControlDirectiveRes_set, hf_index, ett_ansi_map_CallControlDirectiveRes); + + return offset; +} + + +static const ber_sequence_t OAnswer_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 275, BER_FLAGS_IMPLTAG, dissect_timeDateOffset_impl }, + { BER_CLASS_CON, 309, BER_FLAGS_IMPLTAG, dissect_timeOfDay_impl }, + { BER_CLASS_CON, 279, BER_FLAGS_IMPLTAG, dissect_triggerType_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 306, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_featureIndicator_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { 0, 0, 0, NULL } +}; - asn1->offset = saved_offset + len; - break; - } - } +static int +dissect_ansi_map_OAnswer(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + OAnswer_set, hf_index, ett_ansi_map_OAnswer); - g_snprintf(add_string, string_len, " - (%u)", num_parms); -} - - -#define NUM_PARAM_1 (sizeof(ansi_param_1_strings)/sizeof(value_string)) -static gint ett_ansi_param_1[NUM_PARAM_1]; -static void (*param_1_fcn[])(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) = { - param_bill_id, /* Billing ID */ - param_int, /* Serving Cell ID */ - param_int, /* Target Cell ID */ - param_digits, /* Digits */ - param_chan_data, /* Channel Data */ - param_cic, /* Inter MSC Circuit ID */ - param_int, /* Inter Switch Count */ - param_min, /* Mobile Identification Number */ - param_esn, /* Electronic Serial Number */ - param_rel_reason, /* Release Reason */ - param_sig_qual, /* Signal Quality */ - param_scm, /* Station Class Mark */ - param_auth_den, /* Authorization Denied */ - param_auth_per, /* Authorization Period */ - param_seizure, /* Seizure Type */ - param_trunk_stat, /* Trunk Status */ - param_qic, /* Qualification Information Code */ - param_feat_result, /* Feature Result */ - param_red_reason, /* Redirection Reason */ - param_acc_den, /* Access Denied Reason */ - param_mscid, /* MSCID */ - param_sys_type_code, /* System My Type Code */ - param_orig_ind, /* Origination Indicator */ - param_term_res, /* Termination Restriction Code */ - param_calling_feat_ind, /* Calling Features Indicator */ - param_faulty, /* Faulty Parameter */ - param_usage_ind, /* Usage Indicator */ - param_tdma_chan_data, /* TDMA Channel Data */ - param_tdma_call_mode, /* TDMA Call Mode */ - param_ho_reason, /* Handoff Reason */ - NULL, /* NONE */ -}; - - -#define NUM_PARAM_2 (sizeof(ansi_param_2_strings)/sizeof(value_string)) -static gint ett_ansi_param_2[NUM_PARAM_2]; -static void (*param_2_fcn[])(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) = { - param_tdma_burst_ind, /* TDMA Burst Indicator */ - param_pc_ssn, /* PC_SSN */ - param_lai, /* Location Area ID */ - param_sys_acc_type, /* System Access Type */ - param_auth_resp_all, /* Authentication Response */ - param_auth_resp_all, /* Authentication Response Base Station */ - param_auth_resp_all, /* Authentication Response Unique Challenge */ - param_int, /* Call History Count */ - param_confid_mode, /* Confidentiality Modes */ - param_int, /* Random Variable */ - param_int, /* Random Variable Base station */ - param_rand_ssd, /* Random Variable SSD */ - param_rand_unique, /* Random Variable Unique Challenge */ - param_report_type, /* Report Type */ - param_sme_key, /* Signaling Message Encryption Key */ - param_ssd, /* Shared Secret Data */ - param_term_type, /* Terminal Type */ - param_vpmask, /* Voice Privacy Mask */ - param_sys_cap, /* System Capabilities */ - param_deny_acc, /* Deny Access */ - param_upd_count, /* Update Count */ - param_ssd_no_share, /* SSD Not Shared */ - param_ext_mscid, /* Extended MSCID */ - param_ext_sys_type_code, /* Extended System My Type Code */ - param_ctrl_chan_data, /* Control Channel Data */ - param_sys_acc_data, /* System Access Data */ - param_can_den, /* Cancellation Denied */ - param_border_acc, /* Border Cell Access */ - param_cdma_scm, /* CDMA Station Class Mark */ - param_int, /* CDMA Serving One Way Delay */ - param_int, /* CDMA Target One Way Delay */ - param_cdma_call_mode, /* CDMA Call Mode */ - param_cdma_chan_data, /* CDMA Channel Data */ - param_cdma_sig_qual, /* CDMA Signal Quality */ - param_cdma_pilot_strength, /* CDMA Pilot Strength */ - param_mob_rev, /* CDMA Mobile Protocol Revision */ - param_cdma_plcm, /* CDMA Private Long Code Mask */ - param_cdma_code_chan, /* CDMA Code Channel */ - param_cdma_sea_win, /* CDMA Search Window */ - param_ms_loc, /* MS Location */ - param_page_ind, /* Page Indicator */ - param_rec_sig_qual, /* Received Signal Quality */ - param_dereg, /* Deregistration Type */ - param_namps_chan_data, /* NAMPS Channel Data */ - param_alert_code, /* Alert Code */ - param_ann_code, /* Announcement Code */ - param_aav, /* Authentication Algorithm Version */ - param_auth_cap, /* Authentication Capability */ - param_int, /* Call History Count Expected */ - param_digits, /* Calling Party Number Digits 1 */ - param_digits, /* Calling Party Number Digits 2 */ - param_digits, /* Calling Party Number String 1 */ - param_digits, /* Calling Party Number String 2 */ - param_sub_addr, /* Calling Party Subaddress */ - param_can_type, /* Cancellation Type */ - param_digits, /* Carrier Digits */ - param_digits, /* Destination Digits */ - param_dmh_red_ind, /* DMH Redirection Indicator */ - param_list, /* Inter System Termination */ - param_avail_type, /* Availability Type */ - param_list, /* Local Termination */ - param_mw_noti_count, /* Message Waiting Notification Count */ - param_mdn, /* Mobile Directory Number */ - param_digits, /* MSCID Number */ - param_list, /* PSTN Termination */ - param_no_ans_time, /* No Answer Time */ - param_otfi, /* One Time Feature Indicator */ - param_orig_trig, /* Origination Triggers */ - param_randc, /* RANDC */ - param_digits, /* Redirecting Number Digits */ - param_digits, /* Redirecting Number String */ - param_sub_addr, /* Redirecting Number Subaddress */ - param_digits, /* Sender Identification Number */ - param_digits, /* SMS Address */ - param_sms_bd, /* SMS Bearer Data */ - param_sms_charge_ind, /* SMS Charge Indicator */ - param_digits, /* SMS Destination Address */ - param_sms_msg_count, /* SMS Message Count */ - param_sms_noti, /* SMS Notification Indicator */ - param_digits, /* SMS Original Destination Address */ - param_sub_addr, /* SMS Original Destination Subaddress */ - param_digits, /* SMS Original Originating Address */ - param_sub_addr, /* SMS Original Originating Subaddress */ - param_digits, /* SMS Originating Address */ - param_sms_orig_restric, /* SMS Originating Restrictions */ - param_sms_tele, /* SMS Teleservice Identifier */ - param_sms_term_restric, /* SMS Termination Restrictions */ - NULL/* no data */, /* SMS Message Waiting Indicator */ - param_term_acc_type, /* Termination Access Type */ - param_list, /* Termination List */ - param_term_treat, /* Termination Treatment */ - param_term_trig, /* Termination Triggers */ - param_trans_cap, /* Transaction Capability */ - param_unique_chal_rep, /* Unique Challenge Report */ - NULL, /* NONE */ -}; - - -#define NUM_PARAM_3 (sizeof(ansi_param_3_strings)/sizeof(value_string)) -static gint ett_ansi_param_3[NUM_PARAM_3]; -static void (*param_3_fcn[])(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) = { - param_act_code, /* Action Code */ - param_alert_res, /* Alert Result */ - param_list, /* Announcement List */ - param_list, /* CDMA Code Channel Information */ - param_list, /* CDMA Code Channel List */ - param_list, /* CDMA Target Measurement Information */ - param_list, /* CDMA Target Measurement List */ - param_list, /* CDMA Target MAHO Information */ - param_list, /* CDMA Target MAHO List */ - param_conf_call_ind, /* Conference Calling Indicator */ - param_count_upd_report, /* Count Update Report */ - param_digit_collect_ctrl, /* Digit Collection Control */ - param_digits, /* DMH Account Code Digits */ - param_digits, /* DMH Alternate Billing Digits */ - param_digits, /* DMH Billing Digits */ - param_geo_auth, /* Geographic Authorization */ - param_int, /* Leg Information */ - param_mw_noti_type, /* Message Waiting Notification Type */ - param_paca_ind, /* PACA Indicator */ - param_pref_lang_ind, /* Preferred Language Indicator */ - param_rand_valtime, /* Random Valid Time */ - param_digits, /* Restriction Digits */ - param_digits, /* Routing Digits */ - param_setup_result, /* Setup Result */ - param_sms_acc_den_reason, /* SMS Access Denied Reason */ - param_sms_cause, /* SMS Cause Code */ - param_digits, /* SPINI PIN */ - param_spini_trig, /* SPINI Triggers */ - param_ssd_upd_report, /* SSD Update Report */ - param_list, /* Target Measurement Information */ - param_list, /* Target Measurement List */ - param_digits, /* Voice Mailbox PIN */ - param_digits, /* Voice Mailbox Number */ - NULL/* no special handling */, /* Authentication Data */ - param_cond_den_reason, /* Conditionally Denied Reason */ - param_group_info, /* Group Information */ - param_ho_state, /* Handoff State */ - param_namps_call_mode, /* NAMPS Call Mode */ - param_cdma_sci, /* CDMA Slot Cycle Index */ - param_den_auth_per, /* Denied Authorization Period */ - param_digits, /* Pilot Number */ - param_bill_id, /* Pilot Billing ID */ - param_cdma_band_class, /* CDMA Band Class */ - param_list, /* CDMA Band Class Information */ - param_list, /* CDMA Band Class List */ - param_cdma_pilot_pn, /* CDMA Pilot PN */ - NULL/* no special handling */, /* CDMA Service Configuration Record */ - param_cdma_so, /* CDMA Service Option */ - param_list, /* CDMA Service Option List */ - param_cdma_scm2, /* CDMA Station Class Mark 2 */ - param_tdma_sc, /* TDMA Service Code */ - param_tdma_term_cap, /* TDMA Terminal Capability */ - param_tdma_voice_coder, /* TDMA Voice Coder */ - param_a_key_ver, /* A-Key Protocol Version */ - NULL/* XXX what spec ? */, /* Authentication Response Reauthentication */ - NULL/* no special handling */, /* Base Station Partial Key */ - param_ms_min, /* Mobile Station MIN */ - NULL/* no special handling */, /* Mobile Station Partial Key */ - NULL/* no special handling */, /* Modulus Value */ - param_new_min, /* Newly Assigned MIN */ - param_ota_result_code, /* OTASP Result Code */ - NULL/* no special handling */, /* Primitive Value */ - NULL/* XXX what spec ? */, /* Random Variable Reauthentication */ - NULL/* XXX what spec ? */, /* Reauthentication Report */ - param_srvc_ind, /* Service Indicator */ - param_sme_report, /* Signaling Message Encryption Report */ - param_trn, /* Temporary Reference Number */ - param_vp_report, /* Voice Privacy Report */ - NULL/* XXX */, /* Base Station Manufacturer Code */ - NULL/* XXX */, /* BSMC Status */ - param_ctrl_chan_mode, /* Control Channel Mode */ - NULL/* XXX */, /* Non Public Data */ - NULL/* XXX */, /* Paging Frame Class */ - NULL/* XXX */, /* PSID RSID Information */ - NULL/* XXX */, /* PSID RSID List */ - NULL/* XXX */, /* Service Result */ - NULL/* XXX */, /* SOC Status */ - NULL/* XXX */, /* System Operator Code */ - NULL/* XXX */, /* Target Cell ID List */ - NULL/* XXX */, /* User Group */ - NULL/* XXX */, /* User Zone Data */ - NULL/* no special handling */, /* CDMA Connection Reference */ - param_list, /* CDMA Connection Reference Information */ - param_list, /* CDMA Connection Reference List */ - NULL/* XXX */, /* CDMA State */ - param_change_srvc_attr, /* Change Service Attributes */ - NULL/* no special handling */, /* Data Key */ - param_dp_params, /* Data Privacy Parameters */ - param_islp_info, /* ISLP Information */ - param_reason_list, /* Reason List */ - NULL/* XXX */, /* Second Inter MSC Circuit ID */ - param_tdma_bandwidth, /* TDMA Bandwidth */ - param_tdma_data_feat_ind, /* TDMA Data Features Indicator */ - param_tdma_data_mode, /* TDMA Data Mode */ - param_tdma_voice_mode, /* TDMA Voice Mode */ - param_ana_red_info, /* Analog Redirect Info */ - param_list, /* Analog Redirect Record */ - param_cdma_chan_num, /* CDMA Channel Number */ - param_list, /* CDMA Channel Number List */ - param_cdma_pci, /* CDMA Power Combined Indicator */ - param_list, /* CDMA Redirect Record */ - param_cdma_sea_param, /* CDMA Search Parameters */ - param_int, /* CDMA Network Identification */ - param_network_tmsi, /* Network TMSI */ - param_int, /* Network TMSI Expiration Time */ - param_network_tmsi, /* New Network TMSI */ - param_reqd_param_mask, /* Required Parameters Mask */ - param_srvc_red_cause, /* Service Redirection Cause */ - param_srvc_red_info, /* Service Redirection Info */ - param_roaming_ind, /* Roaming Indication */ - NULL/* XXX */, /* Emergency Services Routing Digits */ - NULL/* XXX */, /* Special Handling */ - param_imsi, /* International Mobile Subscriber Identity */ - param_calling_party_name, /* Calling Party Name */ - param_dis_text, /* Display Text */ - param_red_party_name, /* Redirecting Party Name */ - param_srvc_id, /* Service ID */ - param_all_or_none, /* All Or None */ - param_change, /* Change */ - param_list, /* Data Access Element */ - param_list, /* Data Access Element List */ - NULL/* no special handling */, /* Data ID */ - NULL/* no special handling */, /* Database Key */ - param_data_result, /* Data Result */ - param_list, /* Data Update Result */ - param_list, /* Data Update Result List */ - NULL/* no special handling */, /* Data Value */ - param_list, /* Execute Script */ - param_fail_cause, /* Failure Cause */ - param_fail_type, /* Failure Type */ - NULL/* no special handling */, /* Global Title */ - param_list, /* Modification Request */ - param_list, /* Modification Request List */ - param_list, /* Modification Result List */ - NULL/* no special handling */, /* Private Specialized Resource */ - NULL/* no special handling */, /* Script Argument */ - NULL/* no special handling */, /* Script Name */ - NULL/* no special handling */, /* Script Result */ - param_list, /* Service Data Access Element */ - param_list, /* Service Data Access Element List */ - param_list, /* Service Data Result */ - param_list, /* Service Data Result List */ - param_special_rsc, /* Specialized Resource */ - param_time_date_offset, /* Time Date Offset */ - param_list, /* Trigger Address List */ - param_trig_cap, /* Trigger Capability */ - param_list, /* Trigger List */ - param_trig_type, /* Trigger Type */ - param_list, /* WIN Capability */ - param_win_op_cap, /* WIN Operations Capability */ - param_win_trig_list, /* WIN Trigger List */ - param_digits, /* MSC Address */ - param_sus_acc, /* Suspicious Access */ - param_imsi, /* Mobile Station IMSI */ - param_imsi, /* Newly Assigned IMSI */ - NULL/* XXX what spec ? */, /* Command Code */ - param_dis_text2, /* Display Text 2 */ - NULL/* XXX what spec ? */, /* Page Count */ - NULL/* XXX what spec ? */, /* Page Response Time */ - NULL/* XXX what spec ? */, /* SMS Transaction ID */ - NULL/* XXX what spec ? */, /* CAVE Key */ - NULL/* XXX what spec ? */, /* CDMA2000 Mobile Supported Capabilities */ - NULL/* XXX what spec ? */, /* Enhanced Privacy Encryption Report */ - param_inter_msg_time, /* Inter Message Time */ - param_msid_usage, /* MSID Usage */ - param_new_min_ext, /* New MIN Extension */ - param_qos_pri, /* QoS Priority */ - param_cdma_ms_meas_chan_id, /* CDMA MS Measured Channel Identity */ - param_cdma2000_ho_ivk_ios, /* CDMA2000 Handoff Invoke IOS Data */ - param_cdma2000_ho_rsp_ios, /* CDMA2000 Handoff Response IOS Data */ - NULL/* XXX */, /* MIN Extension */ - - param_list, /* Call Recovery ID */ - param_list, /* Call Recovery ID List */ - param_list, /* Position Information */ - param_list, /* CDMA PSMM List */ - param_resume_pic, /* Resume PIC */ - param_dmh_srvc_id, /* DMH Service ID */ - param_feat_ind, /* Feature Indicator */ - param_mscid, /* Control Network ID */ - param_rel_cause, /* Release Cause */ - param_time_day, /* Time Of Day */ - param_call_status, /* Call Status */ - NULL/* no special handling */, /* DMH Charge Information */ - NULL/* no special handling */, /* DMH Billing Indicator */ - param_ms_status, /* MS Status */ - param_pos_info_code, /* Position Information Code */ - param_dtx_ind, /* DTX Indication */ - param_cdma_mob_cap, /* CDMA Mobile Capabilities */ - param_gen_time, /* Generalized Time */ - param_digits, /* Generic Digits */ - param_geo_pos, /* Geographic Position */ - param_mob_call_status, /* Mobile Call Status */ - param_mob_cap, /* Mobile Position Capability */ - param_pos_req_type, /* Position Request Type */ - param_pos_result, /* Position Result */ - param_pos_source, /* Position Source */ - param_acg_encounter, /* ACG Encountered */ - param_ctrl_type, /* Control Type */ - param_gap_duration, /* Gap Duration */ - param_scf_overload_gap_int, /* SCF Overload Gap Interval */ - param_sm_gap_int, /* Service Management System Gap Interval */ - param_cdma_psmm_count, /* CDMA PSMM Count */ - param_cdma_sowd2, /* CDMA Serving One Way Delay 2 */ - NULL/* no special handling */, /* PDSN Address */ - NULL/* no special handling */, /* PDSN Protocol Type */ - NULL/* no special handling */, /* Range */ - param_calling_party_cat, /* Calling Party Category */ - param_digits, /* LCS Client ID */ - param_tdma_maho_cell_id, /* TDMA MAHO Cell ID */ - param_tdma_maho_chan, /* TDMA MAHO Channel */ - param_cdma_soci, /* CDMA Service Option Connection Identifier */ - param_tdma_time_align, /* TDMA Time Alignment */ - param_tdma_maho_req, /* TDMA MAHO Request */ - NULL, /* NONE */ -}; - -/* GENERIC MAP DISSECTOR FUNCTIONS */ + return offset; +} -static void -dissect_ansi_map_len(ASN1_SCK *asn1, proto_tree *tree, gboolean *def_len, guint *len) -{ - guint saved_offset; - int ret; +static const value_string ansi_map_ReleaseCause_vals[] = { + { 0, "unspecified" }, + { 1, "calling-Party" }, + { 2, "called-Party" }, + { 3, "commanded-Disconnect" }, + { 0, NULL } +}; - saved_offset = asn1->offset; - *def_len = FALSE; - *len = 0; - ret = asn1_length_decode(asn1, def_len, len); +static int +dissect_ansi_map_ReleaseCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_releaseCause_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ReleaseCause(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_releaseCause); +} + + +static const ber_sequence_t ODisconnect_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 308, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_releaseCause_impl }, + { BER_CLASS_CON, 275, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_timeDateOffset_impl }, + { BER_CLASS_CON, 309, BER_FLAGS_IMPLTAG, dissect_timeOfDay_impl }, + { BER_CLASS_CON, 123, BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { BER_CLASS_CON, 280, BER_FLAGS_IMPLTAG, dissect_winCapability_impl }, + { BER_CLASS_CON, 279, BER_FLAGS_IMPLTAG, dissect_triggerType_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { 0, 0, 0, NULL } +}; - if (*def_len) - { - proto_tree_add_uint(tree, hf_ansi_map_length, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - *len); - } - else - { - proto_tree_add_text(tree, asn1->tvb, - saved_offset, asn1->offset - saved_offset, - "Length: Indefinite"); - } +static int +dissect_ansi_map_ODisconnect(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ODisconnect_set, hf_index, ett_ansi_map_ODisconnect); + return offset; } -static gboolean -check_ansi_map_tag(ASN1_SCK *asn1, guint tag) -{ - guint saved_offset, real_tag; +static const ber_sequence_t ODisconnectRes_set[] = { + { BER_CLASS_CON, 130, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_announcementList_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ServiceID_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; +static int +dissect_ansi_map_ODisconnectRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ODisconnectRes_set, hf_index, ett_ansi_map_ODisconnectRes); - asn1_id_decode1(asn1, &real_tag); + return offset; +} - asn1->offset = saved_offset; - return(tag == real_tag); -} +static const ber_sequence_t CallRecoveryID_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 275, BER_FLAGS_IMPLTAG, dissect_timeDateOffset_impl }, + { BER_CLASS_CON, 309, BER_FLAGS_IMPLTAG, dissect_timeOfDay_impl }, + { 0, 0, 0, NULL } +}; -static void -dissect_ansi_map_octet(ASN1_SCK *asn1, proto_tree *tree, const guchar * str) -{ - guint saved_offset; - guchar my_oct; +static int +dissect_ansi_map_CallRecoveryID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + CallRecoveryID_set, hf_index, ett_ansi_map_CallRecoveryID); + + return offset; +} +static int dissect_CallRecoveryIDList_item_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CallRecoveryID(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_CallRecoveryIDList_item); +} - saved_offset = asn1->offset; +static const ber_sequence_t CallRecoveryIDList_set_of[1] = { + { BER_CLASS_CON, 303, BER_FLAGS_IMPLTAG, dissect_CallRecoveryIDList_item_impl }, +}; - asn1_octet_decode(asn1, &my_oct); +static int +dissect_ansi_map_CallRecoveryIDList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset, + CallRecoveryIDList_set_of, hf_index, ett_ansi_map_CallRecoveryIDList); - proto_tree_add_uint_format(tree, hf_ansi_map_id, asn1->tvb, - saved_offset, asn1->offset - saved_offset, my_oct, - "%s %u", - str, my_oct); + return offset; +} +static int dissect_callRecoveryIDList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_CallRecoveryIDList(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_callRecoveryIDList); } -static proto_tree * -dissect_ansi_map_component(ASN1_SCK *asn1, proto_tree *tree, guint *len_p) -{ - guint saved_offset; - guint tag; - proto_item *item; - proto_tree *subtree; - gboolean def_len; +static const ber_sequence_t CallRecoveryReport_set[] = { + { BER_CLASS_CON, 303, BER_FLAGS_IMPLTAG, dissect_callRecoveryIDList_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_ansi_map_CallRecoveryReport(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + CallRecoveryReport_set, hf_index, ett_ansi_map_CallRecoveryReport); + + return offset; +} + + +static const ber_sequence_t TAnswer_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 275, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_timeDateOffset_impl }, + { BER_CLASS_CON, 309, BER_FLAGS_IMPLTAG, dissect_timeOfDay_impl }, + { BER_CLASS_CON, 123, BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { BER_CLASS_CON, 279, BER_FLAGS_IMPLTAG, dissect_triggerType_impl }, + { BER_CLASS_CON, 280, BER_FLAGS_IMPLTAG, dissect_winCapability_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 306, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_featureIndicator_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { BER_CLASS_CON, 119, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationAccessType_impl }, + { 0, 0, 0, NULL } +}; - item = - proto_tree_add_text(tree, asn1->tvb, - saved_offset, -1, "Component ID"); +static int +dissect_ansi_map_TAnswer(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TAnswer_set, hf_index, ett_ansi_map_TAnswer); + + return offset; +} + + +static const ber_sequence_t TDisconnect_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 275, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_timeDateOffset_impl }, + { BER_CLASS_CON, 309, BER_FLAGS_IMPLTAG, dissect_timeOfDay_impl }, + { BER_CLASS_CON, 279, BER_FLAGS_IMPLTAG, dissect_triggerType_impl }, + { BER_CLASS_CON, 80, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits1_impl }, + { BER_CLASS_CON, 81, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits2_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 308, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_releaseCause_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { BER_CLASS_CON, 22, BER_FLAGS_IMPLTAG, dissect_systemMyTypeCode_impl }, + { 0, 0, 0, NULL } +}; - subtree = proto_item_add_subtree(item, ett_component); +static int +dissect_ansi_map_TDisconnect(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TDisconnect_set, hf_index, ett_ansi_map_TDisconnect); - proto_tree_add_uint_format(subtree, hf_ansi_map_tag, asn1->tvb, - saved_offset, asn1->offset - saved_offset, tag, - "Component ID Identifier"); + return offset; +} - dissect_ansi_map_len(asn1, subtree, &def_len, len_p); - if ((gint) (asn1->offset - saved_offset + *len_p) < 0) - THROW (ReportedBoundsError); +static const ber_sequence_t TDisconnectRes_set[] = { + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ServiceID_impl }, + { 0, 0, 0, NULL } +}; - proto_item_set_len(item, (asn1->offset - saved_offset) + *len_p); +static int +dissect_ansi_map_TDisconnectRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + TDisconnectRes_set, hf_index, ett_ansi_map_TDisconnectRes); - return(subtree); + return offset; } -static void -dissect_ansi_opr_code(ASN1_SCK *asn1, packet_info *pinfo, proto_tree *tree, gint32 *opr_code_p) -{ - guint saved_offset = 0; - guint len; - guint tag; - gint32 val; - const gchar *str = NULL; - guchar my_oct; - proto_item *item; - proto_tree *subtree; - gboolean def_len; +static const ber_sequence_t UnreliableCallData_set[] = { + { BER_CLASS_CON, 307, BER_FLAGS_IMPLTAG, dissect_controlNetworkID_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { 0, 0, 0, NULL } +}; - *opr_code_p = -1; +static int +dissect_ansi_map_UnreliableCallData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + UnreliableCallData_set, hf_index, ett_ansi_map_UnreliableCallData); + + return offset; +} + + +static const ber_sequence_t OCalledPartyBusy_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 123, BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { BER_CLASS_CON, 279, BER_FLAGS_IMPLTAG, dissect_triggerType_impl }, + { BER_CLASS_CON, 280, BER_FLAGS_IMPLTAG, dissect_winCapability_impl }, + { BER_CLASS_CON, 243, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyName_impl }, + { BER_CLASS_CON, 80, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits1_impl }, + { BER_CLASS_CON, 81, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 87, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_destinationDigits_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 387, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_failureCause_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 245, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingPartyName_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { 0, 0, 0, NULL } +}; -#define TCAP_NAT_OPR_CODE_TAG 0xd0 - if (check_ansi_map_tag(asn1, TCAP_NAT_OPR_CODE_TAG)) - { - str = "National TCAP Operation Code Identifier"; - } -#define TCAP_PRIV_OPR_CODE_TAG 0xd1 - else if (check_ansi_map_tag(asn1, TCAP_PRIV_OPR_CODE_TAG)) - { - str = "Private TCAP Operation Code Identifier"; - } - else - { - proto_tree_add_text(tree, asn1->tvb, - asn1->offset, -1, "Unexpected tag, not National or Private TCAP Operation Code"); - return; - } +static int +dissect_ansi_map_OCalledPartyBusy(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + OCalledPartyBusy_set, hf_index, ett_ansi_map_OCalledPartyBusy); + + return offset; +} + + +static const ber_sequence_t OCalledPartyBusyRes_set[] = { + { BER_CLASS_CON, 128, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_actionCode_impl }, + { BER_CLASS_CON, 130, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_announcementList_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 311, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ChargeInformation_impl }, + { BER_CLASS_CON, 88, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_RedirectionIndicator_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ServiceID_impl }, + { BER_CLASS_CON, 96, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_noAnswerTime_impl }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 120, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationList_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_ansi_map_OCalledPartyBusyRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + OCalledPartyBusyRes_set, hf_index, ett_ansi_map_OCalledPartyBusyRes); + + return offset; +} + + +static const ber_sequence_t ONoAnswer_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 123, BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { BER_CLASS_CON, 279, BER_FLAGS_IMPLTAG, dissect_triggerType_impl }, + { BER_CLASS_CON, 280, BER_FLAGS_IMPLTAG, dissect_winCapability_impl }, + { BER_CLASS_CON, 243, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyName_impl }, + { BER_CLASS_CON, 80, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits1_impl }, + { BER_CLASS_CON, 81, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyNumberDigits2_impl }, + { BER_CLASS_CON, 84, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartySubaddress_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 87, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_destinationDigits_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 245, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingPartyName_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { 0, 0, 0, NULL } +}; - item = - proto_tree_add_text(tree, asn1->tvb, - saved_offset, -1, "Operation Code"); +static int +dissect_ansi_map_ONoAnswer(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ONoAnswer_set, hf_index, ett_ansi_map_ONoAnswer); + + return offset; +} + + +static const ber_sequence_t ONoAnswerRes_set[] = { + { BER_CLASS_CON, 128, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_actionCode_impl }, + { BER_CLASS_CON, 130, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_announcementList_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 311, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ChargeInformation_impl }, + { BER_CLASS_CON, 88, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_RedirectionIndicator_impl }, + { BER_CLASS_CON, 177, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_ServiceID_impl }, + { BER_CLASS_CON, 96, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_noAnswerTime_impl }, + { BER_CLASS_CON, 97, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_oneTimeFeatureIndicator_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 100, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirectingNumberDigits_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 120, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationList_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { 0, 0, 0, NULL } +}; - subtree = proto_item_add_subtree(item, ett_opr_code); +static int +dissect_ansi_map_ONoAnswerRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ONoAnswerRes_set, hf_index, ett_ansi_map_ONoAnswerRes); - proto_tree_add_uint_format(subtree, hf_ansi_map_tag, asn1->tvb, - saved_offset, asn1->offset - saved_offset, tag, str); + return offset; +} - dissect_ansi_map_len(asn1, subtree, &def_len, &len); - if ((gint) (asn1->offset - saved_offset + len) < 0) - THROW (ReportedBoundsError); - proto_item_set_len(item, (asn1->offset - saved_offset) + len); +static int +dissect_ansi_map_PositionInformationCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - if (len > 0) - { - saved_offset = asn1->offset; - asn1_octet_decode(asn1, &my_oct); + return offset; +} +static int dissect_positionInformationCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PositionInformationCode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_positionInformationCode); +} -#define ANSI_MAP_OPR_FAMILY 0x09 - if (my_oct != ANSI_MAP_OPR_FAMILY) - { - asn1->offset = saved_offset; - return; - } - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, 1, "Operation Code Family"); +static const ber_sequence_t PositionRequest_set[] = { + { BER_CLASS_CON, 21, BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 315, BER_FLAGS_IMPLTAG, dissect_positionInformationCode_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 103, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_senderIdentificationNumber_impl }, + { 0, 0, 0, NULL } +}; - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, len-1, &val); - proto_tree_add_int(subtree, hf_ansi_map_opr_code, asn1->tvb, - saved_offset, asn1->offset - saved_offset, val); +static int +dissect_ansi_map_PositionRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + PositionRequest_set, hf_index, ett_ansi_map_PositionRequest); - str = match_strval(val, ansi_map_opr_code_strings); + return offset; +} - if (NULL == str) return; - *opr_code_p = val; - if (check_col(pinfo->cinfo, COL_INFO)) - { - col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", str); - } - } +static int +dissect_ansi_map_MSStatus(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_mSStatus_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_MSStatus(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_mSStatus); } -static void -dissect_ansi_problem(ASN1_SCK *asn1, proto_tree *tree) -{ - guint saved_offset = 0; - guint len; - guint tag; - proto_tree *subtree; - proto_item *item = NULL; - const gchar *str = NULL; - const gchar *type_str = NULL; - gint32 type, spec; - gboolean def_len; +static const ber_sequence_t PositionRequestRes_set[] = { + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 53, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extendedMSCID_impl }, + { BER_CLASS_CON, 94, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSCIdentificationNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 313, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSStatus_impl }, + { BER_CLASS_CON, 32, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pc_ssn_impl }, + { BER_CLASS_CON, 202, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pSID_RSIDInformation_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { 0, 0, 0, NULL } +}; -#define TCAP_PROB_CODE_TAG 0xd5 - if (check_ansi_map_tag(asn1, TCAP_PROB_CODE_TAG)) - { - str = "Problem Code Identifier"; - } - else - { - /* XXX */ - return; - } +static int +dissect_ansi_map_PositionRequestRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + PositionRequestRes_set, hf_index, ett_ansi_map_PositionRequestRes); - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); + return offset; +} - item = - proto_tree_add_text(tree, asn1->tvb, - saved_offset, -1, "Problem Code"); - subtree = proto_item_add_subtree(item, ett_problem); +static const ber_sequence_t PositionRequestForward_set[] = { + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 315, BER_FLAGS_IMPLTAG, dissect_positionInformationCode_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_CON, 242, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { 0, 0, 0, NULL } +}; - proto_tree_add_uint_format(subtree, hf_ansi_map_tag, asn1->tvb, - saved_offset, asn1->offset - saved_offset, tag, str); +static int +dissect_ansi_map_PositionRequestForward(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + PositionRequestForward_set, hf_index, ett_ansi_map_PositionRequestForward); - dissect_ansi_map_len(asn1, subtree, &def_len, &len); + return offset; +} - if ((gint) (asn1->offset - saved_offset + len) < 0) - THROW (ReportedBoundsError); - proto_item_set_len(item, (asn1->offset - saved_offset) + len); +static const ber_sequence_t PositionRequestForwardRes_set[] = { + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_CON, 313, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSStatus_impl }, + { BER_CLASS_CON, 33, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationAreaID_impl }, + { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_servingCellID_impl }, + { 0, 0, 0, NULL } +}; - if (len != 2) - { - proto_tree_add_text(subtree, asn1->tvb, - asn1->offset, len, "Unknown encoding of Problem Code"); +static int +dissect_ansi_map_PositionRequestForwardRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + PositionRequestForwardRes_set, hf_index, ett_ansi_map_PositionRequestForwardRes); - asn1->offset += len; - return; - } + return offset; +} - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &type); - asn1_int32_value_decode(asn1, 1, &spec); - switch (type) - { - case 0: type_str = "Not used"; break; - case 1: - type_str = "General"; - switch (spec) - { - case 1: str = "Unrecognized Component Type"; break; - case 2: str = "Incorrect Component Portion"; break; - case 3: str = "Badly Structured Component Portion"; break; - default: - str = "Undefined"; - break; - } - break; +static int +dissect_ansi_map_ControlType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - case 2: - type_str = "Invoke"; - switch (spec) - { - case 1: str = "Duplicate Invoke ID"; break; - case 2: str = "Unrecognized Operation Code"; break; - case 3: str = "Incorrect Parameter"; break; - case 4: str = "Unrecognized Correlation ID"; break; - default: - str = "Undefined"; - break; - } - break; + return offset; +} +static int dissect_controlType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ControlType(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_controlType); +} - case 3: - type_str = "Return Result"; - switch (spec) - { - case 1: str = "Unrecognized Correlation ID"; break; - case 2: str = "Unexpected Return Result"; break; - case 3: str = "Incorrect Parameter"; break; - default: - str = "Undefined"; - break; - } - break; - case 4: - type_str = "Return Error"; - switch (spec) - { - case 1: str = "Unrecognized Correlation ID"; break; - case 2: str = "Unexpected Return Error"; break; - case 3: str = "Unrecognized Error"; break; - case 4: str = "Unexpected Error"; break; - case 5: str = "Incorrect Parameter"; break; - default: - str = "Undefined"; - break; - } - break; +static const value_string ansi_map_GapDuration_vals[] = { + { 0, "not-used" }, + { 0, NULL } +}; - case 5: - type_str = "Transaction Portion"; - switch (spec) - { - case 1: str = "Unrecognized Package Type"; break; - case 2: str = "Incorrect Transaction Portion"; break; - case 3: str = "Badly Structured Transaction Portion"; break; - case 4: str = "Unrecognized Transaction ID"; break; - case 5: str = "Permission to Release"; break; - case 6: str = "Resource Unavailable"; break; - default: - str = "Undefined"; - break; - } - break; - default: - type_str = "Undefined"; - break; - } +static int +dissect_ansi_map_GapDuration(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_gapDuration_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_GapDuration(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_gapDuration); +} - if (spec == 255) { str = "Reserved"; } - else if (spec == 0) { str = "Not used"; } - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, 1, "Problem Type %s", type_str); +static const value_string ansi_map_SCFOverloadGapInterval_vals[] = { + { 0, "not-used" }, + { 0, NULL } +}; + - proto_tree_add_text(subtree, asn1->tvb, - saved_offset + 1, 1, "Problem Specifier %s", str); +static int +dissect_ansi_map_SCFOverloadGapInterval(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_sCFOverloadGapInterval_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_SCFOverloadGapInterval(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_sCFOverloadGapInterval); } -static void -dissect_ansi_error(ASN1_SCK *asn1, proto_tree *tree) -{ - guint saved_offset = 0; - guint len; - guint tag; - gint32 value; - proto_tree *subtree; - proto_item *item = NULL; - const gchar *str = NULL; - gboolean def_len; +static const value_string ansi_map_ServiceManagementSystemGapInterval_vals[] = { + { 0, "not-used" }, + { 0, NULL } +}; -#define TCAP_NAT_ERR_CODE_TAG 0xd3 - if (check_ansi_map_tag(asn1, TCAP_NAT_ERR_CODE_TAG)) - { - str = "National TCAP Error Code Identifier"; - } -#define TCAP_PRIV_ERR_CODE_TAG 0xd4 - else if (check_ansi_map_tag(asn1, TCAP_PRIV_ERR_CODE_TAG)) - { - str = "Private TCAP Error Code Identifier"; - } - else - { - /* XXX */ - return; - } - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_ansi_map_ServiceManagementSystemGapInterval(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - item = - proto_tree_add_text(tree, asn1->tvb, - saved_offset, -1, "TCAP Error Code"); + return offset; +} +static int dissect_serviceManagementSystemGapInterval_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ServiceManagementSystemGapInterval(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_serviceManagementSystemGapInterval); +} - subtree = proto_item_add_subtree(item, ett_error); - proto_tree_add_uint_format(subtree, hf_ansi_map_tag, asn1->tvb, - saved_offset, asn1->offset - saved_offset, tag, str); +static const value_string ansi_map_GapInterval_vals[] = { + { 343, "sCFOverloadGapInterval" }, + { 344, "serviceManagementSystemGapInterval" }, + { 0, NULL } +}; - dissect_ansi_map_len(asn1, subtree, &def_len, &len); +static const ber_choice_t GapInterval_choice[] = { + { 343, BER_CLASS_CON, 343, BER_FLAGS_IMPLTAG, dissect_sCFOverloadGapInterval_impl }, + { 344, BER_CLASS_CON, 344, BER_FLAGS_IMPLTAG, dissect_serviceManagementSystemGapInterval_impl }, + { 0, 0, 0, 0, NULL } +}; - if ((gint) (asn1->offset - saved_offset + len) < 0) - THROW (ReportedBoundsError); +static int +dissect_ansi_map_GapInterval(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + GapInterval_choice, hf_index, ett_ansi_map_GapInterval, + NULL); - proto_item_set_len(item, (asn1->offset - saved_offset) + len); + return offset; +} +static int dissect_gapInterval(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_GapInterval(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_gapInterval); +} - if ((tag == TCAP_PRIV_ERR_CODE_TAG) && - (len == 1)) - { - saved_offset = asn1->offset; - asn1_int32_value_decode(asn1, 1, &value); - switch (value) - { - case 0x81: str = "Unrecognized MIN"; break; - case 0x82: str = "Unrecognized ESN"; break; - case 0x83: str = "MIN/HLR Mismatch"; break; - case 0x84: str = "Operation Sequence Problem"; break; - case 0x85: str = "Resource Shortage"; break; - case 0x86: str = "Operation Not Supported"; break; - case 0x87: str = "Trunk Unavailable"; break; - case 0x88: str = "Parameter Error"; break; - case 0x89: str = "System Failure"; break; - case 0x8a: str = "Unrecognized Parameter Value"; break; - case 0x8b: str = "Feature Inactive"; break; - case 0x8c: str = "Missing Parameter"; break; - default: - if ((value >= 0xe0) && (value <= 0xff)) { str = "Reserved for protocol extension"; } - else { str = "Reserved"; } - break; - } +static const ber_sequence_t ACGDirective_set[] = { + { BER_CLASS_CON, 341, BER_FLAGS_IMPLTAG, dissect_controlType_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_destinationAddress }, + { BER_CLASS_CON, 342, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gapDuration_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_gapInterval }, + { 0, 0, 0, NULL } +}; - proto_tree_add_text(subtree, asn1->tvb, - saved_offset, 1, str); - } - else - { - proto_tree_add_text(subtree, asn1->tvb, - asn1->offset, len, "Error Code"); +static int +dissect_ansi_map_ACGDirective(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + ACGDirective_set, hf_index, ett_ansi_map_ACGDirective); - asn1->offset += len; - } + return offset; } -static gboolean -dissect_ansi_param(ASN1_SCK *asn1, proto_tree *tree) -{ - void (*param_fcn)(ASN1_SCK *asn1, proto_tree *tree, guint len, gchar *add_string, int string_len) = NULL; - guint saved_offset = 0; - guint len; - proto_tree *subtree; - proto_item *item; - guint val; - const gchar *str = NULL; - gint ett_param_idx, idx; - gboolean def_len; +static int +dissect_ansi_map_InvokingNEType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - saved_offset = asn1->offset; + return offset; +} +static int dissect_invokingNEType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_InvokingNEType(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_invokingNEType); +} - asn1_uint32_value_decode(asn1, 1, &val); - str = match_strval_idx((guint32) val, ansi_param_1_strings, &idx); - if (NULL == str) - { - asn1->offset = saved_offset; - asn1_uint32_value_decode(asn1, 2, &val); - str = match_strval_idx((guint32) val, ansi_param_2_strings, &idx); +static int +dissect_ansi_map_Range(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - if (NULL == str) - { - asn1->offset = saved_offset; - asn1_int32_value_decode(asn1, 3, &val); + return offset; +} +static int dissect_range_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_Range(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_range); +} - str = match_strval_idx((guint32) val, ansi_param_3_strings, &idx); - if (NULL == str) - { - if (((val >= 0x9FFF00) && (val <= 0x9FFF7F)) || - ((val >= 0xBFFF00) && (val <= 0xBFFF7F))) - { - str = "Reserved for protocol extension"; - } - else if (((val >= 0x9FFE76) && (val <= 0x9FFE7F)) || - ((val >= 0xBFFE76) && (val <= 0xBFFE7F))) - { - str = "Reserved for National Network Use"; - } - else - { - str = "Unknown Parameter Data"; - param_fcn = NULL; - } +static const ber_sequence_t RoamerDatabaseVerificationRequest_set[] = { + { BER_CLASS_CON, 353, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_invokingNEType_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_CON, 352, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_range_impl }, + { 0, 0, 0, NULL } +}; - ett_param_idx = ett_param; - } - else - { - ett_param_idx = ett_ansi_param_3[idx]; - param_fcn = param_3_fcn[idx]; - } - } - else - { - ett_param_idx = ett_ansi_param_2[idx]; - param_fcn = param_2_fcn[idx]; - } - } - else - { - ett_param_idx = ett_ansi_param_1[idx]; - param_fcn = param_1_fcn[idx]; - } +static int +dissect_ansi_map_RoamerDatabaseVerificationRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RoamerDatabaseVerificationRequest_set, hf_index, ett_ansi_map_RoamerDatabaseVerificationRequest); - item = - proto_tree_add_text(tree, asn1->tvb, - saved_offset, -1, str); + return offset; +} - subtree = proto_item_add_subtree(item, ett_param_idx); - proto_tree_add_uint_format(subtree, hf_ansi_map_param_id, asn1->tvb, - saved_offset, asn1->offset - saved_offset, val, "Parameter ID"); +static const ber_sequence_t RoamerDatabaseVerificationRequestRes_set[] = { + { BER_CLASS_CON, 123, BER_FLAGS_IMPLTAG, dissect_transactionCapability_impl }, + { 0, 0, 0, NULL } +}; - dissect_ansi_map_len(asn1, subtree, &def_len, &len); +static int +dissect_ansi_map_RoamerDatabaseVerificationRequestRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + RoamerDatabaseVerificationRequestRes_set, hf_index, ett_ansi_map_RoamerDatabaseVerificationRequestRes); - if ((gint) (asn1->offset - saved_offset + len) < 0) - THROW (ReportedBoundsError); + return offset; +} - proto_item_set_len(item, asn1->offset - saved_offset + len); - if (len > 0) - { - if (param_fcn == NULL) - { - proto_tree_add_text(subtree, asn1->tvb, - asn1->offset, len, "Parameter Data"); - asn1->offset += len; - } - else - { - gchar *ansi_map_add_string; +static const ber_sequence_t AddService_set[] = { + { BER_CLASS_CON, 212, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaConnectionReferenceList_impl }, + { BER_CLASS_CON, 176, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOptionList_impl }, + { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digits_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 242, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { 0, 0, 0, NULL } +}; - ansi_map_add_string=ep_alloc(1024); - ansi_map_add_string[0] = '\0'; +static int +dissect_ansi_map_AddService(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AddService_set, hf_index, ett_ansi_map_AddService); - (*param_fcn)(asn1, subtree, len, ansi_map_add_string, 1024); + return offset; +} - if (ansi_map_add_string[0] != '\0') - { - proto_item_append_text(item, ansi_map_add_string); - } - } - } - return(TRUE); -} +static const ber_sequence_t AddServiceRes_set[] = { + { BER_CLASS_CON, 212, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaConnectionReferenceList_impl }, + { BER_CLASS_CON, 176, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOptionList_impl }, + { BER_CLASS_CON, 348, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_qosPriority_impl }, + { BER_CLASS_CON, 218, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reasonList_impl }, + { 0, 0, 0, NULL } +}; +static int +dissect_ansi_map_AddServiceRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + AddServiceRes_set, hf_index, ett_ansi_map_AddServiceRes); -static void -dissect_ansi_params(ASN1_SCK *asn1, proto_tree *tree) -{ - guint saved_offset = 0; - guint len; - guint tag; - proto_tree *subtree; - proto_item *item = NULL; - const gchar *str = NULL; - gboolean def_len; - gchar *ansi_map_add_string; + return offset; +} -#define TCAP_PARAM_SET_TAG 0xf2 - if (check_ansi_map_tag(asn1, TCAP_PARAM_SET_TAG)) - { - str = "Parameter Set Identifier"; - } -#define TCAP_PARAM_SEQ_TAG 0x30 - else if (check_ansi_map_tag(asn1, TCAP_PARAM_SEQ_TAG)) - { - str = "Parameter Sequence Identifier"; - } - else - { - /* XXX */ - return; - } - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static const ber_sequence_t DropService_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { BER_CLASS_CON, 212, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaConnectionReferenceList_impl }, + { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_interMSCCircuitID_impl }, + { BER_CLASS_CON, 242, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl }, + { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileIdentificationNumber_impl }, + { BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_releaseReason_impl }, + { 0, 0, 0, NULL } +}; - item = - proto_tree_add_text(tree, asn1->tvb, - saved_offset, -1, "Parameters"); +static int +dissect_ansi_map_DropService(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + DropService_set, hf_index, ett_ansi_map_DropService); - subtree = proto_item_add_subtree(item, ett_params); + return offset; +} - proto_tree_add_uint_format(subtree, hf_ansi_map_tag, asn1->tvb, - saved_offset, asn1->offset - saved_offset, tag, str); - dissect_ansi_map_len(asn1, subtree, &def_len, &len); +static const ber_sequence_t DropServiceRes_set[] = { + { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_billingID_impl }, + { 0, 0, 0, NULL } +}; - if ((gint) (asn1->offset - saved_offset + len) < 0) - THROW (ReportedBoundsError); +static int +dissect_ansi_map_DropServiceRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + DropServiceRes_set, hf_index, ett_ansi_map_DropServiceRes); - proto_item_set_len(item, (asn1->offset - saved_offset) + len); + return offset; +} - ansi_map_add_string = ep_alloc(1024); - ansi_map_add_string[0] = '\0'; - param_list(asn1, subtree, len, ansi_map_add_string, 1024); - if (ansi_map_add_string[0] != '\0') - { - proto_item_append_text(item, ansi_map_add_string); - } -} +static int +dissect_ansi_map_AKeyProtocolVersion(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); -static void -dissect_ansi_map_reject(ASN1_SCK *asn1, proto_tree *tree) -{ - guint len; - proto_tree *subtree; + return offset; +} +static int dissect_aKeyProtocolVersion_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_AKeyProtocolVersion(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_aKeyProtocolVersion); +} -#define COMPONENT_ID_TAG 0xcf - if (check_ansi_map_tag(asn1, COMPONENT_ID_TAG)) - { - subtree = dissect_ansi_map_component(asn1, tree, &len); - switch (len) - { - case 1: - dissect_ansi_map_octet(asn1, subtree, "Correlation ID:"); - break; - } - } - dissect_ansi_problem(asn1, tree); +static int +dissect_ansi_map_MobileStationPartialKey(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - dissect_ansi_params(asn1, tree); + return offset; +} +static int dissect_mobileStationPartialKey_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_MobileStationPartialKey(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_mobileStationPartialKey); } -static void -dissect_ansi_map_re(ASN1_SCK *asn1, proto_tree *tree) -{ - guint len; - proto_tree *subtree; -#define COMPONENT_ID_TAG 0xcf - if (check_ansi_map_tag(asn1, COMPONENT_ID_TAG)) - { - subtree = dissect_ansi_map_component(asn1, tree, &len); +static const value_string ansi_map_NewlyAssignedMSID_vals[] = { + { 187, "newlyAssignedMIN" }, + { 287, "newlyAssignedIMSI" }, + { 0, NULL } +}; - switch (len) - { - case 1: - dissect_ansi_map_octet(asn1, subtree, "Correlation ID:"); - break; - } - } +static const ber_choice_t NewlyAssignedMSID_choice[] = { + { 187, BER_CLASS_CON, 187, BER_FLAGS_IMPLTAG, dissect_newlyAssignedMIN_impl }, + { 287, BER_CLASS_CON, 287, BER_FLAGS_IMPLTAG, dissect_newlyAssignedIMSI_impl }, + { 0, 0, 0, 0, NULL } +}; + +static int +dissect_ansi_map_NewlyAssignedMSID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_choice(pinfo, tree, tvb, offset, + NewlyAssignedMSID_choice, hf_index, ett_ansi_map_NewlyAssignedMSID, + NULL); + + return offset; +} +static int dissect_newlyAssignedMSID(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_NewlyAssignedMSID(FALSE, tvb, offset, pinfo, tree, hf_ansi_map_newlyAssignedMSID); +} + + +static const ber_sequence_t OTASPRequest_set[] = { + { BER_CLASS_CON, 128, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ctionCode_impl }, + { BER_CLASS_CON, 181, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_aKeyProtocolVersion_impl }, + { BER_CLASS_CON, 161, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authenticationData_impl }, + { BER_CLASS_CON, 35, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authenticationResponse_impl }, + { BER_CLASS_CON, 38, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callHistoryCount_impl }, + { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_electronicSerialNumber_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_msid }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_mobileStationMSID }, + { BER_CLASS_CON, 185, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileStationPartialKey_impl }, + { BER_CLASS_CON, 21, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mscid_impl }, + { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_newlyAssignedMSID }, + { BER_CLASS_CON, 40, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_randomVariable_impl }, + { BER_CLASS_CON, 41, BER_FLAGS_IMPLTAG, dissect_randomVariableBaseStation_impl }, + { BER_CLASS_CON, 193, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceIndicator_impl }, + { BER_CLASS_CON, 49, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_systemCapabilities_impl }, + { BER_CLASS_CON, 47, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminalType_impl }, + { 0, 0, 0, NULL } +}; - dissect_ansi_error(asn1, tree); +static int +dissect_ansi_map_OTASPRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + OTASPRequest_set, hf_index, ett_ansi_map_OTASPRequest); - dissect_ansi_params(asn1, tree); + return offset; } -static void -dissect_ansi_map_rr(ASN1_SCK *asn1, proto_tree *tree) -{ - guint len; - proto_tree *subtree; -#define COMPONENT_ID_TAG 0xcf - if (check_ansi_map_tag(asn1, COMPONENT_ID_TAG)) - { - subtree = dissect_ansi_map_component(asn1, tree, &len); - switch (len) - { - case 1: - dissect_ansi_map_octet(asn1, subtree, "Correlation ID:"); - break; - } - } +static int +dissect_ansi_map_BaseStationPartialKey(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - dissect_ansi_params(asn1, tree); + return offset; +} +static int dissect_baseStationPartialKey_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_BaseStationPartialKey(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_baseStationPartialKey); } -static void -dissect_ansi_map_invoke(ASN1_SCK *asn1, packet_info *pinfo, proto_tree *tree, gint *opr_code_p) -{ - guint len; - proto_tree *subtree; -#define COMPONENT_ID_TAG 0xcf - if (check_ansi_map_tag(asn1, COMPONENT_ID_TAG)) - { - subtree = dissect_ansi_map_component(asn1, tree, &len); - switch (len) - { - case 1: - dissect_ansi_map_octet(asn1, subtree, "Invoke ID:"); - break; - - case 2: - dissect_ansi_map_octet(asn1, subtree, "Invoke ID:"); - dissect_ansi_map_octet(asn1, subtree, "Correlation ID:"); - break; - } - } +static int +dissect_ansi_map_ModulusValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_modulusValue_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_ModulusValue(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_modulusValue); +} - ansi_map_is_invoke = TRUE; - dissect_ansi_opr_code(asn1, pinfo, tree, opr_code_p); - dissect_ansi_params(asn1, tree); +static int +dissect_ansi_map_OTASP_ResultCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_otasp_ResultCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_OTASP_ResultCode(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_otasp_ResultCode); } -static void -dissect_ansi_map_message(ASN1_SCK *asn1, packet_info *pinfo, proto_tree *ansi_map_tree) -{ - static ansi_map_tap_rec_t tap_rec; - guint saved_offset; - guint tag; - guint len; - const gchar *str = NULL; - proto_item *item, *tag_item; - proto_tree *subtree, *tag_subtree; - gboolean def_len; - static int i = 0; - gint opr_code; - saved_offset = asn1->offset; - asn1_id_decode1(asn1, &tag); +static int +dissect_ansi_map_PrimitiveValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} +static int dissect_primitiveValue_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + return dissect_ansi_map_PrimitiveValue(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_primitiveValue); +} + + +static const ber_sequence_t OTASPRequestRes_set[] = { + { BER_CLASS_CON, 181, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_aKeyProtocolVersion_impl }, + { BER_CLASS_CON, 36, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authenticationResponseBaseStation_impl }, + { BER_CLASS_CON, 183, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_baseStationPartialKey_impl }, + { BER_CLASS_CON, 50, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_denyAccess_impl }, + { BER_CLASS_CON, 186, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_modulusValue_impl }, + { BER_CLASS_CON, 189, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_otasp_ResultCode_impl }, + { BER_CLASS_CON, 190, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_primitiveValue_impl }, + { BER_CLASS_CON, 194, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_signalingMessageEncryptionReport_impl }, + { BER_CLASS_CON, 156, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ssdUpdateReport_impl }, + { BER_CLASS_CON, 124, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uniqueChallengeReport_impl }, + { BER_CLASS_CON, 196, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_voicePrivacyReport_impl }, + { 0, 0, 0, NULL } +}; - str = match_strval(tag, ansi_cmp_type_strings); +static int +dissect_ansi_map_OTASPRequestRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + OTASPRequestRes_set, hf_index, ett_ansi_map_OTASPRequestRes); - if (NULL == str) return; + return offset; +} - if (check_col(pinfo->cinfo, COL_INFO)) - { - if (0 == i) - { - col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", str); - } - else - { - col_append_fstr(pinfo->cinfo, COL_INFO, "& %s ", str); - } - } - item = - proto_tree_add_text(ansi_map_tree, asn1->tvb, - saved_offset, -1, "Components"); - subtree = proto_item_add_subtree(item, ett_components); - tag_item = - proto_tree_add_uint_format(subtree, hf_ansi_map_tag, asn1->tvb, - saved_offset, asn1->offset - saved_offset, tag, str); +static int +dissect_ansi_map_FaultyParameter(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); + + return offset; +} + + +static const ber_sequence_t Profile_set[] = { + { BER_CLASS_CON, 78, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authenticationCapability_impl }, + { BER_CLASS_CON, 25, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingFeaturesIndicator_impl }, + { BER_CLASS_CON, 86, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_carrierDigits_impl }, + { BER_CLASS_CON, 176, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cdmaServiceOptionList_impl }, + { BER_CLASS_CON, 307, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_controlNetworkID_impl }, + { BER_CLASS_CON, 140, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AccountCodeDigits_impl }, + { BER_CLASS_CON, 141, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_AlternateBillingDigits_impl }, + { BER_CLASS_CON, 142, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dmh_BillingDigits_impl }, + { BER_CLASS_CON, 143, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_geographicAuthorization_impl }, + { BER_CLASS_CON, 92, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_messageWaitingNotificationCount_impl }, + { BER_CLASS_CON, 289, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_messageWaitingNotificationType_impl }, + { BER_CLASS_CON, 93, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mobileDirectoryNumber_impl }, + { BER_CLASS_CON, 23, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_originationIndicator_impl }, + { BER_CLASS_CON, 98, BER_FLAGS_IMPLTAG, dissect_originationTriggers_impl }, + { BER_CLASS_CON, 274, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pACAIndicator_impl }, + { BER_CLASS_CON, 147, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_preferredLanguageIndicator_impl }, + { BER_CLASS_CON, 348, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_qosPriority_impl }, + { BER_CLASS_CON, 227, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_restrictionDigits_impl }, + { BER_CLASS_CON, 150, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routingDigits_impl }, + { BER_CLASS_CON, 203, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pSID_RSIDList_impl }, + { BER_CLASS_CON, 115, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_OriginationRestrictions_impl }, + { BER_CLASS_CON, 117, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_TerminationRestrictions_impl }, + { BER_CLASS_CON, 154, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_spinipin_impl }, + { BER_CLASS_CON, 155, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_spiniTriggers_impl }, + { BER_CLASS_CON, 221, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tdmaDataFeaturesIndicator_impl }, + { BER_CLASS_CON, 24, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationRestrictionCode_impl }, + { BER_CLASS_CON, 122, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationTriggers_impl }, + { BER_CLASS_CON, 276, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_triggerAddressList_impl }, + { BER_CLASS_CON, 208, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_userGroup_impl }, + { BER_CLASS_CON, 200, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nonPublicData_impl }, + { BER_CLASS_CON, 209, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_userZoneData_impl }, + { BER_CLASS_CON, 355, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callingPartyCategory_impl }, + { 0, 0, 0, NULL } +}; - dissect_ansi_map_len(asn1, subtree, &def_len, &len); +static int +dissect_ansi_map_Profile(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + Profile_set, hf_index, ett_ansi_map_Profile); - tag_subtree = proto_item_add_subtree(tag_item, ett_components); + return offset; +} - opr_code = -1; - switch (tag) - { - case ANSI_TC_INVOKE_L: - dissect_ansi_map_invoke(asn1, pinfo, tag_subtree, &opr_code); - break; - case ANSI_TC_RRL: - dissect_ansi_map_rr(asn1, tag_subtree); - break; +static int +dissect_ansi_map_CDMABandClassInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - case ANSI_TC_RE: - dissect_ansi_map_re(asn1, tag_subtree); - break; + return offset; +} - case ANSI_TC_REJECT: - dissect_ansi_map_reject(asn1, tag_subtree); - break; - case ANSI_TC_INVOKE_N: - dissect_ansi_map_invoke(asn1, pinfo, tag_subtree, &opr_code); - break; - case ANSI_TC_RRN: - dissect_ansi_map_rr(asn1, tag_subtree); - break; +static int +dissect_ansi_map_CDMABandClassList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, + NULL); - default: - /* XXX */ - break; - } + return offset; +} - if (bd_tvb != NULL) - { - if (ansi_map_sms_tele_id != -1) - { - dissector_try_port(is637_tele_id_dissector_table, ansi_map_sms_tele_id, bd_tvb, g_pinfo, g_tree); - ansi_map_sms_tele_id = -1; - } - else if (is683_ota) - { - dissector_try_port(is683_dissector_table, ansi_map_is_invoke ? 0 : 1, bd_tvb, g_pinfo, g_tree); - } - else if (is801_pld) - { - dissector_try_port(is801_dissector_table, ansi_map_is_invoke ? 0 : 1, bd_tvb, g_pinfo, g_tree); - } - } - proto_item_set_len(item, asn1->offset - saved_offset); +static const ber_sequence_t SRFCapability_set[] = { + { BER_CLASS_CON, 274, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_specializedResource_impl }, + { BER_CLASS_CON, 383, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_privateSpecializedResource_impl }, + { 0, 0, 0, NULL } +}; - if (opr_code != -1) - { - tap_rec.message_type = opr_code; - tap_rec.size = asn1->offset - saved_offset; +static int +dissect_ansi_map_SRFCapability(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) { + offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset, + SRFCapability_set, hf_index, ett_ansi_map_SRFCapability); + + return offset; +} + +/*--- PDUs ---*/ + +static void dissect_AuthenticationDirective_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_ansi_map_AuthenticationDirective(FALSE, tvb, 0, pinfo, tree, hf_ansi_map_AuthenticationDirective_PDU); +} +static void dissect_AuthenticationDirectiveRes_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_ansi_map_AuthenticationDirectiveRes(FALSE, tvb, 0, pinfo, tree, hf_ansi_map_AuthenticationDirectiveRes_PDU); +} +static void dissect_OriginationRequest_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_ansi_map_OriginationRequest(FALSE, tvb, 0, pinfo, tree, hf_ansi_map_OriginationRequest_PDU); +} +static void dissect_OriginationRequestRes_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { + dissect_ansi_map_OriginationRequestRes(FALSE, tvb, 0, pinfo, tree, hf_ansi_map_OriginationRequestRes_PDU); +} + + +/*--- End of included file: packet-ansi_map-fn.c ---*/ +#line 3172 "packet-ansi_map-template.c" + +static int dissect_invokeData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + + gint *opcode; + struct tcap_private_t * p_private_tcap; + + /* Data from the TCAP dissector */ + if (pinfo->private_data != NULL){ + p_private_tcap=pinfo->private_data; + opcode = g_malloc(sizeof(gint)); + OperationCode = OperationCode&0x00ff; + *opcode = OperationCode; + g_hash_table_insert(TransactionId_table, g_strdup(p_private_tcap->TransactionID_str), opcode); + } + + ansi_map_is_invoke = TRUE; + if (check_col(pinfo->cinfo, COL_INFO)){ + col_set_str(pinfo->cinfo, COL_INFO, val_to_str(OperationCode, ansi_map_opr_code_strings, "Unknown ANSI-MAP PDU (%u)")); + } + + switch(OperationCode){ + case 1: /*Handoff Measurement Request*/ + offset = dissect_ansi_map_HandoffMeasurementRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 2: /*Facilities Directive*/ + offset = dissect_ansi_map_FacilitiesDirective(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 3: /*Mobile On Channel*/ + proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob"); + break; + case 4: /*Handoff Back*/ + offset = dissect_ansi_map_HandoffBack(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 5: /*Facilities Release*/ + offset = dissect_ansi_map_FacilitiesRelease(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 6: /*Qualification Request*/ + offset = dissect_ansi_map_QualificationRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 7: /*Qualification Directive*/ + offset = dissect_ansi_map_QualificationDirective(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 8: /*Blocking*/ + offset = dissect_ansi_map_Blocking(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 9: /*Unblocking*/ + offset = dissect_ansi_map_Unblocking(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 10: /*Reset Circuit*/ + offset = dissect_ansi_map_ResetCircuit(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 11: /*Trunk Test*/ + offset = dissect_ansi_map_TrunkTest(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 12: /*Trunk Test Disconnect*/ + offset = dissect_ansi_map_TrunkTestDisconnect(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 13: /*Registration Notification*/ + offset = dissect_ansi_map_RegistrationNotification(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 14: /*Registration Cancellation*/ + offset = dissect_ansi_map_RegistrationCancellation(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 15: /*Location Request*/ + offset = dissect_ansi_map_LocationRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 16: /*Routing Request*/ + offset = dissect_ansi_map_RoutingRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 17: /*Feature Request*/ + offset = dissect_ansi_map_FeatureRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 18: /*Reserved 18 (Service Profile Request, IS-41-C)*/ + proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob(18 (Service Profile Request, IS-41-C)"); + break; + case 19: /*Reserved 19 (Service Profile Directive, IS-41-C)*/ + proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob(19 Service Profile Directive, IS-41-C)"); + break; + case 20: /*Unreliable Roamer Data Directive*/ + offset = dissect_ansi_map_UnreliableRoamerDataDirective(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 21: /*Reserved 21 (Call Data Request, IS-41-C)*/ + proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob(Reserved 21 (Call Data Request, IS-41-C)"); + break; + case 22: /*MS Inactive*/ + offset = dissect_ansi_map_MSInactive(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 23: /*Transfer To Number Request*/ + offset = dissect_ansi_map_TransferToNumberRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 24: /*Redirection Request*/ + offset = dissect_ansi_map_RedirectionRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 25: /*Handoff To Third*/ + offset = dissect_ansi_map_HandoffToThird(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 26: /*Flash Request*/ + offset = dissect_ansi_map_FlashRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 27: /*Authentication Directive*/ + offset = dissect_ansi_map_AuthenticationDirective(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 28: /*Authentication Request*/ + offset = dissect_ansi_map_AuthenticationRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 29: /*Base Station Challenge*/ + offset = dissect_ansi_map_BaseStationChallenge(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 30: /*Authentication Failure Report*/ + offset = dissect_ansi_map_AuthenticationFailureReport(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 31: /*Count Request*/ + offset = dissect_ansi_map_CountRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 32: /*Inter System Page*/ + offset = dissect_ansi_map_InterSystemPage(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 33: /*Unsolicited Response*/ + offset = dissect_ansi_map_UnsolicitedResponse(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 34: /*Bulk Deregistration*/ + offset = dissect_ansi_map_BulkDeregistration(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 35: /*Handoff Measurement Request 2*/ + offset = dissect_ansi_map_HandoffMeasurementRequest2(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 36: /*Facilities Directive 2*/ + offset = dissect_ansi_map_FacilitiesDirective2(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 37: /*Handoff Back 2*/ + offset = dissect_ansi_map_HandoffBack2(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 38: /*Handoff To Third 2*/ + offset = dissect_ansi_map_HandoffToThird2(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 39: /*Authentication Directive Forward*/ + offset = dissect_ansi_map_AuthenticationDirectiveForward(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 40: /*Authentication Status Report*/ + offset = dissect_ansi_map_AuthenticationStatusReport(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 41: /*Reserved 41*/ + proto_tree_add_text(tree, tvb, offset, -1, "Reserved 41, Unknown invokeData blob"); + break; + case 42: /*Information Directive*/ + offset = dissect_ansi_map_InformationDirective(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 43: /*Information Forward*/ + offset = dissect_ansi_map_InformationForward(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 44: /*Inter System Answer*/ + offset = dissect_ansi_map_InterSystemAnswer(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 45: /*Inter System Page 2*/ + offset = dissect_ansi_map_InterSystemPage2(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 46: /*Inter System Setup*/ + offset = dissect_ansi_map_InterSystemSetup(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 47: /*OriginationRequest*/ + offset = dissect_ansi_map_OriginationRequest(TRUE, tvb, offset, pinfo, tree, hf_ansi_map_OriginationRequest_PDU); + break; + case 48: /*Random Variable Request*/ + offset = dissect_ansi_map_RandomVariableRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 49: /*Redirection Directive*/ + offset = dissect_ansi_map_RedirectionDirective(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 50: /*Remote User Interaction Directive*/ + offset = dissect_ansi_map_RemoteUserInteractionDirective(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 51: /*SMS Delivery Backward*/ + offset = dissect_ansi_map_SMSDeliveryBackward(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 52: /*SMS Delivery Forward*/ + offset = dissect_ansi_map_SMSDeliveryForward(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 53: /*SMS Delivery Point to Point*/ + offset = dissect_ansi_map_SMSDeliveryPointToPoint(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 54: /*SMS Notification*/ + offset = dissect_ansi_map_SMSNotification(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 55: /*SMS Request*/ + offset = dissect_ansi_map_SMSRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + /* End N.S0005*/ + /* N.S0010-0 v 1.0 */ + /* N.S0011-0 v 1.0 */ + case 56: /*OTASP Request 6.4.2.CC*/ + offset = dissect_ansi_map_OTASPRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + /*End N.S0011-0 v 1.0 */ + case 57: /*Information Backward*/ + offset = offset; + break; + /* N.S0008-0 v 1.0 */ + case 58: /*Change Facilities*/ + offset = dissect_ansi_map_ChangeFacilities(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 59: /*Change Service*/ + offset = dissect_ansi_map_ChangeService(TRUE, tvb, offset, pinfo, tree, -1); + break; + /* End N.S0008-0 v 1.0 */ + case 60: /*Parameter Request*/ + offset = dissect_ansi_map_ParameterRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 61: /*TMSI Directive*/ + offset = dissect_ansi_map_TMSIDirective(TRUE, tvb, offset, pinfo, tree, -1); + break; + /*End N.S0010-0 v 1.0 */ + case 62: /*Reserved 62*/ + proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob(Reserved 62)"); + break; + case 63: /*Service Request N.S0012-0 v 1.0*/ + offset = dissect_ansi_map_ServiceRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + /* N.S0013 */ + case 64: /*Analyzed Information Request*/ + offset = dissect_ansi_map_AnalyzedInformation(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 65: /*Connection Failure Report*/ + offset = dissect_ansi_map_ConnectionFailureReport(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 66: /*Connect Resource*/ + offset = dissect_ansi_map_ConnectResource(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 67: /*Disconnect Resource*/ + /* No data */ + break; + case 68: /*Facility Selected and Available*/ + offset = dissect_ansi_map_FacilitySelectedAndAvailable(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 69: /*Instruction Request*/ + /* No data */ + break; + case 70: /*Modify*/ + offset = dissect_ansi_map_Modify(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 71: /*Reset Timer*/ + /*No Data*/ + break; + case 72: /*Search*/ + offset = dissect_ansi_map_Search(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 73: /*Seize Resource*/ + offset = dissect_ansi_map_SeizeResource(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 74: /*SRF Directive*/ + offset = dissect_ansi_map_SRFDirective(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 75: /*T Busy*/ + offset = dissect_ansi_map_TBusy(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 76: /*T NoAnswer*/ + offset = dissect_ansi_map_TNoAnswer(TRUE, tvb, offset, pinfo, tree, -1); + break; + /*END N.S0013 */ + case 77: /*Release*/ + offset = offset; + break; + case 78: /*SMS Delivery Point to Point Ack*/ + offset = offset; + break; + /* N.S0024*/ + case 79: /*Message Directive*/ + offset = dissect_ansi_map_MessageDirective(TRUE, tvb, offset, pinfo, tree, -1); + break; + /*END N.S0024*/ + /* N.S0018 PN-4287*/ + case 80: /*Bulk Disconnection*/ + offset = dissect_ansi_map_BulkDisconnection(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 81: /*Call Control Directive*/ + offset = dissect_ansi_map_CallControlDirective(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 82: /*O Answer*/ + offset = dissect_ansi_map_OAnswer(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 83: /*O Disconnect*/ + offset = dissect_ansi_map_ODisconnect(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 84: /*Call Recovery Report*/ + offset = dissect_ansi_map_CallRecoveryReport(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 85: /*T Answer*/ + offset = dissect_ansi_map_TAnswer(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 86: /*T Disconnect*/ + offset = dissect_ansi_map_TDisconnect(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 87: /*Unreliable Call Data*/ + offset = dissect_ansi_map_UnreliableCallData(TRUE, tvb, offset, pinfo, tree, -1); + break; + /* N.S0018 PN-4287*/ + /*N.S0004 */ + case 88: /*O CalledPartyBusy*/ + offset = dissect_ansi_map_OCalledPartyBusy(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 89: /*O NoAnswer*/ + offset = dissect_ansi_map_ONoAnswer(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 90: /*Position Request*/ + offset = dissect_ansi_map_PositionRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 91: /*Position Request Forward*/ + offset = dissect_ansi_map_PositionRequestForward(TRUE, tvb, offset, pinfo, tree, -1); + break; + /*END N.S0004 */ + case 92: /*Call Termination Report*/ + offset = offset; + break; + case 93: /*Geo Position Directive*/ + offset = offset; + break; + case 94: /*Geo Position Request*/ + offset = offset; + break; + case 95: /*Inter System Position Request*/ + offset = offset; + break; + case 96: /*Inter System Position Request Forward*/ + offset = offset; + break; + /* 3GPP2 N.S0023-0 */ + case 97: /*ACG Directive*/ + offset = dissect_ansi_map_ACGDirective(TRUE, tvb, offset, pinfo, tree, -1); + break; + /* END 3GPP2 N.S0023-0 */ + case 98: /*Roamer Database Verification Request*/ + offset = dissect_ansi_map_RoamerDatabaseVerificationRequest(TRUE, tvb, offset, pinfo, tree, -1); + break; + /* N.S0029 */ + case 99: /*Add Service*/ + offset = dissect_ansi_map_AddService(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 100: /*Drop Service*/ + offset = dissect_ansi_map_DropService(TRUE, tvb, offset, pinfo, tree, -1); + break; + /*End N.S0029 */ + default: + proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob"); + break; + } + + return offset; - tap_queue_packet(ansi_map_tap, pinfo, &tap_rec); - } -} + } + +static int dissect_returnData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) { + gint *opcode; + struct tcap_private_t *p_private_tcap; + proto_item *item; + + /* Data from the TCAP dissector */ + if (pinfo->private_data != NULL){ + p_private_tcap=pinfo->private_data; + opcode = g_hash_table_lookup(TransactionId_table, p_private_tcap->TransactionID_str); + if(opcode){ + OperationCode = *opcode; + }else{ + OperationCode = OperationCode & 0x00ff; + } + }else{ + OperationCode = OperationCode & 0x00ff; + } + item = proto_tree_add_text(tree, tvb, offset, -1, "OperationCode %s",val_to_str(OperationCode, ansi_map_opr_code_strings, "Unknown %u")); + PROTO_ITEM_SET_GENERATED(item); + + if (check_col(pinfo->cinfo, COL_INFO)){ + col_clear(pinfo->cinfo, COL_INFO); + col_add_fstr(pinfo->cinfo, COL_INFO,"%s Response", val_to_str(OperationCode, ansi_map_opr_code_strings, "Unknown ANSI-MAP PDU (%u)")); + } + + switch(OperationCode){ + case 1: /*Handoff Measurement Request*/ + offset = dissect_ansi_map_HandoffMeasurementRequestRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 2: /*Facilities Directive*/ + offset = dissect_ansi_map_FacilitiesDirectiveRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 4: /*Handoff Back*/ + offset = dissect_ansi_map_HandoffBackRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 5: /*Facilities Release*/ + offset = dissect_ansi_map_FacilitiesReleaseRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 6: /*Qualification Request*/ + offset = dissect_ansi_map_QualificationRequestRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 10: /*Reset Circuit*/ + offset = dissect_ansi_map_ResetCircuitRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 13: /*Registration Notification*/ + offset = dissect_ansi_map_RegistrationNotificationRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 14: /*Registration Cancellation*/ + offset = dissect_ansi_map_RegistrationCancellationRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 15: /*Location Request*/ + offset = dissect_ansi_map_LocationRequestRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 16: /*Routing Request*/ + offset = dissect_ansi_map_RoutingRequestRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 17: /*Feature Request*/ + offset = dissect_ansi_map_FeatureRequestRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 23: /*Transfer To Number Request*/ + offset = dissect_ansi_map_TransferToNumberRequestRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 25: /*Handoff To Third*/ + offset = dissect_ansi_map_HandoffToThirdRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 27: /*Authentication Directive*/ + offset = dissect_ansi_map_AuthenticationDirectiveRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 28: /*Authentication Request*/ + offset = dissect_ansi_map_AuthenticationRequestRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 30: /*Authentication Failure Report*/ + offset = dissect_ansi_map_AuthenticationFailureReportRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 31: /*Count Request*/ + offset = dissect_ansi_map_CountRequestRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 32: /*Inter System Page*/ + offset = dissect_ansi_map_InterSystemPageRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 33: /*Unsolicited Response*/ + offset = dissect_ansi_map_UnsolicitedResponseRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 35: /*Handoff Measurement Request 2*/ + offset = dissect_ansi_map_HandoffMeasurementRequest2Res(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 36: /*Facilities Directive 2*/ + offset = dissect_ansi_map_FacilitiesDirective2Res(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 37: /*Handoff Back 2*/ + offset = dissect_ansi_map_HandoffBack2Res(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 38: /*Handoff To Third 2*/ + offset = dissect_ansi_map_HandoffToThird2Res(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 39: /*Authentication Directive Forward*/ + offset = dissect_ansi_map_AuthenticationDirectiveForwardRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 40: /*Authentication Status Report*/ + offset = dissect_ansi_map_AuthenticationStatusReportRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + /*Reserved 41*/ + case 43: /*Information Forward*/ + offset = dissect_ansi_map_InformationForwardRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 45: /*Inter System Page 2*/ + offset = dissect_ansi_map_InterSystemPage2Res(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 46: /*Inter System Setup*/ + offset = dissect_ansi_map_InterSystemSetupRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 47: /*OriginationRequest*/ + offset = dissect_ansi_map_OriginationRequestRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 48: /*Random Variable Request*/ + offset = dissect_ansi_map_RandomVariableRequestRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 50: /*Remote User Interaction Directive*/ + offset = dissect_ansi_map_RemoteUserInteractionDirectiveRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 51: /*SMS Delivery Backward*/ + offset = dissect_ansi_map_SMSDeliveryBackwardRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 52: /*SMS Delivery Forward*/ + offset = dissect_ansi_map_SMSDeliveryForwardRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 53: /*SMS Delivery Point to Point*/ + offset = dissect_ansi_map_SMSDeliveryPointToPointRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 54: /*SMS Notification*/ + offset = dissect_ansi_map_SMSNotificationRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 55: /*SMS Request*/ + offset = dissect_ansi_map_SMSRequestRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + /* N.S0008-0 v 1.0 */ + case 56: /*OTASP Request 6.4.2.CC*/ + offset = dissect_ansi_map_OTASPRequestRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 58: /*Change Facilities*/ + offset = dissect_ansi_map_ChangeFacilitiesRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 59: /*Change Service*/ + offset = dissect_ansi_map_ChangeServiceRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 60: /*Parameter Request*/ + offset = dissect_ansi_map_ParameterRequestRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 61: /*TMSI Directive*/ + offset = dissect_ansi_map_TMSIDirectiveRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 63: /*Service Request*/ + offset = dissect_ansi_map_ServiceRequestRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + /* N.S0013 */ + case 64: /*Analyzed Information Request*/ + offset = dissect_ansi_map_AnalyzedInformationRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 68: /*Facility Selected and Available*/ + offset = dissect_ansi_map_FacilitySelectedAndAvailableRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 70: /*Modify*/ + offset = dissect_ansi_map_ModifyRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 72: /*Search*/ + offset = dissect_ansi_map_SearchRes(TRUE, tvb, offset, pinfo, tree, -1);; + break; + case 73: /*Seize Resource*/ + offset = dissect_ansi_map_SeizeResourceRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 74: /*SRF Directive*/ + offset = dissect_ansi_map_SRFDirectiveRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 75: /*T Busy*/ + offset = dissect_ansi_map_TBusyRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 76: /*T NoAnswer*/ + offset = dissect_ansi_map_TNoAnswerRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 81: /*Call Control Directive*/ + offset = dissect_ansi_map_CallControlDirectiveRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 83: /*O Disconnect*/ + offset = dissect_ansi_map_ODisconnectRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 86: /*T Disconnect*/ + offset = dissect_ansi_map_TDisconnectRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 88: /*O CalledPartyBusy*/ + offset = dissect_ansi_map_OCalledPartyBusyRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 89: /*O NoAnswer*/ + offset = dissect_ansi_map_ONoAnswerRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 90: /*Position Request*/ + offset = dissect_ansi_map_PositionRequestRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 91: /*Position Request Forward*/ + offset = dissect_ansi_map_PositionRequestForwardRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 98: /*Roamer Database Verification Request*/ + offset = dissect_ansi_map_RoamerDatabaseVerificationRequestRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 99: /*Add Service*/ + offset = dissect_ansi_map_AddServiceRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + case 100: /*Drop Service*/ + offset = dissect_ansi_map_DropServiceRes(TRUE, tvb, offset, pinfo, tree, -1); + break; + /*End N.S0029 */ + + default: + proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob"); + break; + } + + return offset; + + } static void dissect_ansi_map(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { proto_item *ansi_map_item; proto_tree *ansi_map_tree = NULL; - ASN1_SCK asn1; int offset = 0; + SMS_BearerData_tvb = NULL; g_pinfo = pinfo; - + g_tree = tree; /* * Make entry in the Protocol column on summary display */ if (check_col(pinfo->cinfo, COL_PROTOCOL)) { - col_set_str(pinfo->cinfo, COL_PROTOCOL, "ANSI MAP"); + col_set_str(pinfo->cinfo, COL_PROTOCOL, "ANSI MAP"); } - /* In the interest of speed, if "tree" is NULL, don't do any work not - * necessary to generate protocol tree items. - */ - if (tree) - { - g_tree = tree; - /* * create the ansi_map protocol tree */ - ansi_map_item = - proto_tree_add_item(tree, proto_ansi_map, tvb, 0, -1, FALSE); - - ansi_map_tree = - proto_item_add_subtree(ansi_map_item, ett_ansi_map); - - asn1_open(&asn1, tvb, offset); - + ansi_map_item = proto_tree_add_item(tree, proto_ansi_map, tvb, 0, -1, FALSE); + ansi_map_tree = proto_item_add_subtree(ansi_map_item, ett_ansi_map); ansi_map_is_invoke = FALSE; is683_ota = FALSE; is801_pld = FALSE; - bd_tvb = NULL; - dissect_ansi_map_message(&asn1, pinfo, ansi_map_tree); + dissect_ansi_map_ComponentPDU(FALSE, tvb, offset, pinfo, ansi_map_tree, -1); - asn1_close(&asn1, &offset); - } } - /*--- proto_reg_handoff_ansi_map ---------------------------------------*/ - static void range_delete_callback(guint32 ssn) +static void range_delete_callback(guint32 ssn) { - if (ssn) { - delete_ansi_tcap_subdissector(ssn , ansi_map_handle); - add_ansi_tcap_subdissector(ssn , ansi_map_handle); - } + if (ssn) { + delete_ansi_tcap_subdissector(ssn , ansi_map_handle); + add_ansi_tcap_subdissector(ssn , ansi_map_handle); + } } - - static void range_add_callback(guint32 ssn) { - if (ssn) { - add_ansi_tcap_subdissector(ssn , ansi_map_handle); - } + if (ssn) { + add_ansi_tcap_subdissector(ssn , ansi_map_handle); + } } - void proto_reg_handoff_ansi_map(void) { static int ansi_map_prefs_initialized = FALSE; data_handle = find_dissector("data"); - + if(!ansi_map_prefs_initialized) { ansi_map_prefs_initialized = TRUE; @@ -13079,150 +13804,2430 @@ dissect_ansi_map(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { range_foreach(ssn_range, range_delete_callback); } - + g_free(ssn_range); ssn_range = range_copy(global_ssn_range); - + range_foreach(ssn_range, range_add_callback); } - - -/* Register the protocol with Wireshark */ -void -proto_register_ansi_map(void) -{ - guint i; - gint last_offset; - module_t *ansi_map_module; - - /* Setup list of header fields */ - static hf_register_info hf[] = - { - { &hf_ansi_map_tag, - { "Tag", "ansi_map.tag", - FT_UINT8, BASE_HEX, NULL, 0, - "", HFILL } - }, - { &hf_ansi_map_length, - { "Length", "ansi_map.len", - FT_UINT8, BASE_DEC, NULL, 0, - "", HFILL } - }, - { &hf_ansi_map_id, - { "Value", "ansi_map.id", - FT_UINT8, BASE_DEC, NULL, 0, - "", HFILL } - }, - { &hf_ansi_map_opr_code, - { "Operation Code", "ansi_map.oprcode", - FT_INT32, BASE_DEC, VALS(ansi_map_opr_code_strings), 0, - "", HFILL } - }, - { &hf_ansi_map_param_id, - { "Param ID", "ansi_map.param_id", - FT_UINT32, BASE_HEX, NULL, 0, - "", HFILL } - }, - { &hf_ansi_map_billing_id, - { "Billing ID", "ansi_map.billing_id", - FT_INT32, BASE_DEC, NULL, 0, - "", HFILL } - }, - { &hf_ansi_map_ios_elem_id, - { "IOS 4.0.1 Element ID", "ansi_map.ios_elem_id", - FT_NONE, 0, NULL, 0, - "", HFILL } - }, - { &hf_ansi_map_min, - { "MIN", "ansi_map.min", - FT_STRING, BASE_DEC, 0, 0, - "", HFILL } - }, - { &hf_ansi_map_number, - { "Number", "ansi_map.number", - FT_STRING, BASE_DEC, 0, 0, - "", HFILL } - }, - }; - - /* Setup protocol subtree array */ -#define NUM_INDIVIDUAL_PARAMS 15 - gint *ett[NUM_INDIVIDUAL_PARAMS+NUM_PARAM_1+NUM_PARAM_2+NUM_PARAM_3+NUM_IOS_ELEM]; - - memset((void *) ett, -1, sizeof(ett)); - - ett[0] = &ett_ansi_map; - ett[1] = &ett_opr_code; - ett[2] = &ett_component; - ett[3] = &ett_components; - ett[4] = &ett_param; - ett[5] = &ett_params; - ett[6] = &ett_error; - ett[7] = &ett_problem; - ett[8] = &ett_natnum; - ett[9] = &ett_call_mode; - ett[10] = &ett_chan_data; - ett[11] = &ett_code_chan; - ett[12] = &ett_clr_dig_mask; - ett[13] = &ett_ent_dig_mask; - ett[14] = &ett_all_dig_mask; - - last_offset = NUM_INDIVIDUAL_PARAMS; - - for (i=0; i < NUM_PARAM_1; i++, last_offset++) - { - ett[last_offset] = &ett_ansi_param_1[i]; - } - - for (i=0; i < NUM_PARAM_2; i++, last_offset++) - { - ett[last_offset] = &ett_ansi_param_2[i]; - } - - for (i=0; i < NUM_PARAM_3; i++, last_offset++) - { - ett[last_offset] = &ett_ansi_param_3[i]; - } - - for (i=0; i < NUM_IOS_ELEM; i++, last_offset++) - { - ett[last_offset] = &ett_ansi_map_ios_elem[i]; - } - - /* Register the protocol name and description */ - proto_ansi_map = - proto_register_protocol("ANSI Mobile Application Part", - "ANSI MAP", "ansi_map"); - - is637_tele_id_dissector_table = - register_dissector_table("ansi_map.tele_id", "IS-637 Teleservice ID", +/*--- proto_register_ansi_map -------------------------------------------*/ +void proto_register_ansi_map(void) { + + module_t *ansi_map_module; + + /* List of fields */ + static hf_register_info hf[] = { + + { &hf_ansi_map_op_code_fam, + { "Operation Code Family", "ansi_map.op_code_fam", + FT_UINT8, BASE_DEC, NULL, 0, + "Operation Code Family", HFILL }}, + { &hf_ansi_map_op_code, + { "Operation Code", "ansi_map.op_code", + FT_UINT8, BASE_DEC, VALS(ansi_map_opr_code_strings), 0x0, + "Operation Code", HFILL }}, + { &hf_ansi_map_type_of_digits, + { "Type of Digits", "ansi_map.type_of_digits", + FT_UINT8, BASE_DEC, VALS(ansi_map_type_of_digits_vals), 0x0, + "Type of Digits", HFILL }}, + { &hf_ansi_map_na, + { "Nature of Number", "ansi_map.na", + FT_BOOLEAN, 8, TFS(&ansi_map_na_bool_val),0x01, + "Nature of Number", HFILL }}, + { &hf_ansi_map_pi, + { "Presentation Indication", "ansi_map.type_of_pi", + FT_BOOLEAN, 8, TFS(&ansi_map_pi_bool_val),0x02, + "Presentation Indication", HFILL }}, + { &hf_ansi_map_navail, + { "Numer available indication", "ansi_map.navail", + FT_BOOLEAN, 8, TFS(&ansi_map_navail_bool_val),0x04, + "Numer available indication", HFILL }}, + { &hf_ansi_map_si, + { "Screening indication", "ansi_map.si", + FT_UINT8, BASE_DEC, VALS(ansi_map_si_vals), 0x30, + "Screening indication", HFILL }}, + { &hf_ansi_map_digits_enc, + { "Encoding", "ansi_map.enc", + FT_UINT8, BASE_DEC, VALS(ansi_map_digits_enc_vals), 0x0f, + "Encoding", HFILL }}, + { &hf_ansi_map_np, + { "Numbering Plan", "ansi_map.np", + FT_UINT8, BASE_DEC, VALS(ansi_map_np_vals), 0xf0, + "Numbering Plan", HFILL }}, + { &hf_ansi_map_nr_digits, + { "Number of Digits", "ansi_map.nr_digits", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Number of Digits", HFILL }}, + { &hf_ansi_map_bcd_digits, + { "BCD digits", "gsm_map.bcd_digits", + FT_STRING, BASE_NONE, NULL, 0, + "BCD digits", HFILL }}, + { &hf_ansi_map_ia5_digits, + { "IA5 digits", "gsm_map.ia5_digits", + FT_STRING, BASE_NONE, NULL, 0, + "IA5 digits", HFILL }}, + { &hf_ansi_map_subaddr_type, + { "Type of Subaddress", "ansi_subaddr_type", + FT_UINT8, BASE_DEC, VALS(ansi_map_sub_addr_type_vals), 0x70, + "Type of Subaddress", HFILL }}, + { &hf_ansi_map_subaddr_odd_even, + { "Odd/Even Indicator", "ansi_map.subaddr_odd_even", + FT_BOOLEAN, 8, TFS(&ansi_map_navail_bool_val),0x08, + "Odd/Even Indicator", HFILL }}, + + { &hf_ansi_alertcode_cadence, + { "Cadence", "ansi_map._alertcode.cadence", + FT_UINT8, BASE_DEC, VALS(ansi_map_AlertCode_Cadence_vals), 0x3f, + "Cadence", HFILL }}, + { &hf_ansi_alertcode_pitch, + { "Pitch", "ansi_map._alertcode.pitch", + FT_UINT8, BASE_DEC, VALS(ansi_map_AlertCode_Pitch_vals), 0xc0, + "Pitch", HFILL }}, + { &hf_ansi_alertcode_alertaction, + { "Alert Action", "ansi_map._alertcode.alertaction", + FT_UINT8, BASE_DEC, VALS(ansi_map_AlertCode_Alert_Action_vals), 0x07, + "Alert Action", HFILL }}, + { &hf_ansi_map_announcementcode_tone, + { "Tone", "ansi_map.announcementcode.tone", + FT_UINT8, BASE_DEC, VALS(ansi_map_AnnouncementCode_tone_vals), 0x0, + "Tone", HFILL }}, + { &hf_ansi_map_announcementcode_class, + { "Tone", "ansi_map.announcementcode.class", + FT_UINT8, BASE_DEC, VALS(ansi_map_AnnouncementCode_class_vals), 0xf, + "Tone", HFILL }}, + { &hf_ansi_map_announcementcode_std_ann, + { "Standard Announcement", "ansi_map.announcementcode.std_ann", + FT_UINT8, BASE_DEC, VALS(ansi_map_AnnouncementCode_std_ann_vals), 0x0, + "Standard Announcement", HFILL }}, + { &hf_ansi_map_announcementcode_cust_ann, + { "Custom Announcement", "ansi_map.announcementcode.cust_ann", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Custom Announcement", HFILL }}, + { &hf_ansi_map_authorizationperiod_period, + { "Period", "ansi_map.authorizationperiod.period", + FT_UINT8, BASE_DEC, VALS(ansi_map_authorizationperiod_period_vals), 0x0, + "Period", HFILL }}, + { &hf_ansi_map_value, + { " Value", "ansi_map.value", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Value", HFILL }}, + { &hf_ansi_map_msc_type, + { "Type", "ansi_map.extendedmscid.type", + FT_UINT8, BASE_DEC, VALS(ansi_map_msc_type_vals), 0x0, + "Type", HFILL }}, + { &hf_ansi_map_handoffstate_pi, + { "Party Involved (PI)", "ansi_map.handoffstate.pi", + FT_BOOLEAN, 8, TFS(&ansi_map_HandoffState_pi_bool_val),0x01, + "Party Involved (PI)", HFILL }}, + { &hf_ansi_map_tgn, + { "Trunk Group Number (G)", "ansi_map.tgn", + FT_UINT8, BASE_DEC, NULL,0x0, + "Trunk Group Number (G)", HFILL }}, + { &hf_ansi_map_tmn, + { "Trunk Member Number (M)", "ansi_map.tgn", + FT_UINT8, BASE_DEC, NULL,0x0, + "Trunk Member Number (M)", HFILL }}, + { &hf_ansi_map_messagewaitingnotificationcount_tom, + { "Type of messages", "ansi_map.messagewaitingnotificationcount.tom", + FT_UINT8, BASE_DEC, VALS(ansi_map_MessageWaitingNotificationCount_type_vals), 0x0, + "Type of messages", HFILL }}, + { &hf_ansi_map_messagewaitingnotificationcount_no_mw, + { "Number of Messages Waiting", "ansi_map.messagewaitingnotificationcount.nomw", + FT_UINT8, BASE_DEC, NULL,0x0, + "Number of Messages Waiting", HFILL }}, + { &hf_ansi_map_messagewaitingnotificationtype_mwi, + { "Message Waiting Indication (MWI)", "ansi_map.messagewaitingnotificationcount.mwi", + FT_UINT8, BASE_DEC, VALS(ansi_map_MessageWaitingNotificationType_mwi_vals), 0x0, + "Message Waiting Indication (MWI)", HFILL }}, + { &hf_ansi_map_messagewaitingnotificationtype_apt, + { "Alert Pip Tone (APT)", "ansi_map.messagewaitingnotificationtype.apt", + FT_BOOLEAN, 8, TFS(&ansi_map_HandoffState_pi_bool_val),0x02, + "Alert Pip Tone (APT)", HFILL }}, + { &hf_ansi_map_messagewaitingnotificationtype_pt, + { "Pip Tone (PT)", "ansi_map.messagewaitingnotificationtype.pt", + FT_UINT8, BASE_DEC, VALS(ansi_map_MessageWaitingNotificationType_mwi_vals), 0xc0, + "Pip Tone (PT)", HFILL }}, + + { &hf_ansi_map_trans_cap_prof, + { "Profile (PROF)", "ansi_map.trans_cap_prof", + FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_prof_bool_val),0x01, + "Profile (PROF)", HFILL }}, + { &hf_ansi_map_trans_cap_busy, + { "Busy Detection (BUSY)", "ansi_map.trans_cap_busy", + FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_busy_bool_val),0x02, + "Busy Detection (BUSY)", HFILL }}, + { &hf_ansi_map_trans_cap_ann, + { "Announcements (ANN)", "ansi_map.trans_cap_ann", + FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_ann_bool_val),0x04, + "Announcements (ANN)", HFILL }}, + { &hf_ansi_map_trans_cap_rui, + { "Remote User Interaction (RUI)", "ansi_map.trans_cap_rui", + FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_rui_bool_val),0x08, + "Remote User Interaction (RUI)", HFILL }}, + { &hf_ansi_map_trans_cap_spini, + { "Subscriber PIN Intercept (SPINI)", "ansi_map.trans_cap_spini", + FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_spini_bool_val),0x10, + "Subscriber PIN Intercept (SPINI)", HFILL }}, + { &hf_ansi_map_trans_cap_uzci, + { "UZ Capability Indicator (UZCI)", "ansi_map.trans_cap_uzci", + FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_uzci_bool_val),0x20, + "UZ Capability Indicator (UZCI)", HFILL }}, + { &hf_ansi_map_trans_cap_ndss, + { "NDSS Capability (NDSS)", "ansi_map.trans_cap_ndss", + FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_ndss_bool_val),0x40, + "NDSS Capability (NDSS)", HFILL }}, + { &hf_ansi_map_trans_cap_nami, + { "NAME Capability Indicator (NAMI)", "ansi_map.trans_cap_nami", + FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_nami_bool_val),0x80, + "NAME Capability Indicator (NAMI)", HFILL }}, + { &hf_ansi_trans_cap_multerm, + { "Multiple Terminations", "ansi_map.trans_cap_multerm", + FT_UINT8, BASE_DEC, VALS(ansi_map_trans_cap_multerm_vals), 0x0f, + "Multiple Terminations", HFILL }}, + { &hf_ansi_map_terminationtriggers_busy, + { "Busy", "ansi_map.terminationtriggers.busy", + FT_UINT8, BASE_DEC, VALS(ansi_map_terminationtriggers_busy_vals), 0x03, + "Busy", HFILL }}, + { &hf_ansi_map_terminationtriggers_rf, + { "Routing Failure (RF)", "ansi_map.terminationtriggers.rf", + FT_UINT8, BASE_DEC, VALS(ansi_map_terminationtriggers_rf_vals), 0x0c, + "Routing Failure (RF)", HFILL }}, + { &hf_ansi_map_terminationtriggers_npr, + { "No Page Response (NPR)", "ansi_map.terminationtriggers.npr", + FT_UINT8, BASE_DEC, VALS(ansi_map_terminationtriggers_npr_vals), 0x30, + "No Page Response (NPR)", HFILL }}, + { &hf_ansi_map_terminationtriggers_na, + { "No Answer (NA)", "ansi_map.terminationtriggers.na", + FT_UINT8, BASE_DEC, VALS(ansi_map_terminationtriggers_na_vals), 0xc0, + "No Answer (NA)", HFILL }}, + { &hf_ansi_map_terminationtriggers_nr, + { "None Reachable (NR)", "ansi_map.terminationtriggers.nr", + FT_UINT8, BASE_DEC, VALS(ansi_map_terminationtriggers_nr_vals), 0x01, + "None Reachable (NR)", HFILL }}, + { &hf_ansi_trans_cap_tl, + { "TerminationList (TL)", "ansi_map.trans_cap_tl", + FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_tl_bool_val),0x10, + "TerminationList (TL)", HFILL }}, + { &hf_ansi_trans_cap_waddr, + { "WIN Addressing (WADDR)", "ansi_map.trans_cap_waddr", + FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_waddr_bool_val),0x20, + "WIN Addressing (WADDR)", HFILL }}, + + { &hf_ansi_map_MarketID, + { "MarketID", "ansi_map.marketid", + FT_UINT16, BASE_DEC, NULL, 0, + "MarketID", HFILL }}, + { &hf_ansi_map_swno, + { "Switch Number (SWNO)", "ansi_map.swno", + FT_UINT8, BASE_DEC, NULL, 0, + "Switch Number (SWNO)", HFILL }}, + { &hf_ansi_map_idno, + { "ID Number", "ansi_map.idno", + FT_UINT32, BASE_DEC, NULL, 0, + "ID Number", HFILL }}, + { &hf_ansi_map_segcount, + { "Segment Counter", "ansi_map.segcount", + FT_UINT8, BASE_DEC, NULL, 0, + "Segment Counter", HFILL }}, + { &hf_ansi_map_systemcapabilities_auth, + { "Authentication Parameters Requested (AUTH)", "ansi_map.systemcapabilities.auth", + FT_BOOLEAN, 8, TFS(&ansi_map_systemcapabilities_auth_bool_val),0x01, + "Authentication Parameters Requested (AUTH)", HFILL }}, + { &hf_ansi_map_systemcapabilities_se, + { "Signaling Message Encryption Capable (SE )", "ansi_map.systemcapabilities.se", + FT_BOOLEAN, 8, TFS(&ansi_map_systemcapabilities_se_bool_val),0x02, + "Signaling Message Encryption Capable (SE )", HFILL }}, + { &hf_ansi_map_systemcapabilities_vp, + { "Voice Privacy Capable (VP )", "ansi_map.systemcapabilities.vp", + FT_BOOLEAN, 8, TFS(&ansi_map_systemcapabilities_vp_bool_val),0x04, + "Voice Privacy Capable (VP )", HFILL }}, + { &hf_ansi_map_systemcapabilities_cave, + { "CAVE Algorithm Capable (CAVE)", "ansi_map.systemcapabilities.cave", + FT_BOOLEAN, 8, TFS(&ansi_map_systemcapabilities_cave_bool_val),0x08, + "CAVE Algorithm Capable (CAVE)", HFILL }}, + { &hf_ansi_map_systemcapabilities_ssd, + { "Shared SSD (SSD)", "ansi_map.systemcapabilities.ssd", + FT_BOOLEAN, 8, TFS(&ansi_map_systemcapabilities_ssd_bool_val),0x10, + "Shared SSD (SSD)", HFILL }}, + { &hf_ansi_map_systemcapabilities_dp, + { "Data Privacy (DP)", "ansi_map.systemcapabilities.dp", + FT_BOOLEAN, 8, TFS(&ansi_map_systemcapabilities_dp_bool_val),0x20, + "Data Privacy (DP)", HFILL }}, + + { &hf_ansi_map_mslocation_lat, + { "Latitude in tenths of a second", "ansi_map.mslocation.lat", + FT_UINT8, BASE_DEC, NULL, 0, + "Latitude in tenths of a second", HFILL }}, + { &hf_ansi_map_mslocation_long, + { "Longitude in tenths of a second", "ansi_map.mslocation.long", + FT_UINT8, BASE_DEC, NULL, 0, + "Switch Number (SWNO)", HFILL }}, + { &hf_ansi_map_mslocation_res, + { "Resolution in units of 1 foot", "ansi_map.mslocation.res", + FT_UINT8, BASE_DEC, NULL, 0, + "Resolution in units of 1 foot", HFILL }}, + { &hf_ansi_map_nampscallmode_namps, + { "Call Mode", "ansi_map.nampscallmode.namps", + FT_BOOLEAN, 8, TFS(&ansi_map_CallMode_namps_bool_val),0x01, + "Call Mode", HFILL }}, + { &hf_ansi_map_nampscallmode_amps, + { "Call Mode", "ansi_map.nampscallmode.amps", + FT_BOOLEAN, 8, TFS(&ansi_map_CallMode_amps_bool_val),0x02, + "Call Mode", HFILL }}, + { &hf_ansi_map_nampschanneldata_navca, + { "Narrow Analog Voice Channel Assignment (NAVCA)", "ansi_map.nampschanneldata.navca", + FT_UINT8, BASE_DEC, VALS(ansi_map_NAMPSChannelData_navca_vals), 0x03, + "Narrow Analog Voice Channel Assignment (NAVCA)", HFILL }}, + { &hf_ansi_map_nampschanneldata_CCIndicator, + { "Color Code Indicator (CCIndicator)", "ansi_map.nampschanneldata.ccindicator", + FT_UINT8, BASE_DEC, VALS(ansi_map_NAMPSChannelData_ccinidicator_vals), 0x1c, + "Color Code Indicator (CCIndicator)", HFILL }}, + + + { &hf_ansi_map_callingfeaturesindicator_cfufa, + { "Call Forwarding Unconditional FeatureActivity, CFU-FA", "ansi_map.callingfeaturesindicator.cfufa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x03, + "Call Forwarding Unconditional FeatureActivity, CFU-FA", HFILL }}, + { &hf_ansi_map_callingfeaturesindicator_cfbfa, + { "Call Forwarding Busy FeatureActivity, CFB-FA", "ansi_map.callingfeaturesindicator.cfbafa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x0c, + "Call Forwarding Busy FeatureActivity, CFB-FA", HFILL }}, + { &hf_ansi_map_callingfeaturesindicator_cfnafa, + { "Call Forwarding No Answer FeatureActivity, CFNA-FA", "ansi_map.callingfeaturesindicator.cfnafa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x30, + "Call Forwarding No Answer FeatureActivity, CFNA-FA", HFILL }}, + { &hf_ansi_map_callingfeaturesindicator_cwfa, + { "Call Waiting: FeatureActivity, CW-FA", "ansi_map.callingfeaturesindicator.cwfa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0xc0, + "Call Waiting: FeatureActivity, CW-FA", HFILL }}, + + { &hf_ansi_map_callingfeaturesindicator_3wcfa, + { "Three-Way Calling FeatureActivity, 3WC-FA", "ansi_map.callingfeaturesindicator.3wcfa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x03, + "Three-Way Calling FeatureActivity, 3WC-FA", HFILL }}, + + { &hf_ansi_map_callingfeaturesindicator_pcwfa, + { "Priority Call Waiting FeatureActivity PCW-FA", "ansi_map.callingfeaturesindicator.pcwfa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x03, + "Priority Call Waiting FeatureActivity PCW-FA", HFILL }}, + + { &hf_ansi_map_callingfeaturesindicator_dpfa, + { "Data Privacy Feature Activity DP-FA", "ansi_map.callingfeaturesindicator.dpfa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x0c, + "Data Privacy Feature Activity DP-FA", HFILL }}, + { &hf_ansi_map_callingfeaturesindicator_ahfa, + { "Answer Hold: FeatureActivity AH-FA", "ansi_map.callingfeaturesindicator.ahfa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x30, + "Answer Hold: FeatureActivity AH-FA", HFILL }}, + { &hf_ansi_map_callingfeaturesindicator_uscfvmfa, + { "USCF divert to voice mail: FeatureActivity USCFvm-FA", "ansi_map.callingfeaturesindicator.uscfvmfa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0xc0, + "USCF divert to voice mail: FeatureActivity USCFvm-FA", HFILL }}, + + { &hf_ansi_map_callingfeaturesindicator_uscfmsfa, + { "USCF divert to mobile station provided DN:FeatureActivity.USCFms-FA", "ansi_map.callingfeaturesindicator.uscfmsfa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x03, + "USCF divert to mobile station provided DN:FeatureActivity.USCFms-FA", HFILL }}, + { &hf_ansi_map_callingfeaturesindicator_uscfnrfa, + { "USCF divert to network registered DN:FeatureActivity. USCFnr-FA", "ansi_map.callingfeaturesindicator.uscfmsfa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x0c, + "USCF divert to network registered DN:FeatureActivity. USCFnr-FA", HFILL }}, + { &hf_ansi_map_callingfeaturesindicator_cpdsfa, + { "CDMA-Packet Data Service: FeatureActivity. CPDS-FA", "ansi_map.callingfeaturesindicator.cpdfa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x30, + "CDMA-Packet Data Service: FeatureActivity. CPDS-FA", HFILL }}, + { &hf_ansi_map_callingfeaturesindicator_ccsfa, + { "CDMA-Concurrent Service:FeatureActivity. CCS-FA", "ansi_map.callingfeaturesindicator.ccsfa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0xc0, + "CDMA-Concurrent Service:FeatureActivity. CCS-FA", HFILL }}, + + { &hf_ansi_map_callingfeaturesindicator_epefa, + { "TDMA Enhanced Privacy and Encryption:FeatureActivity.TDMA EPE-FA", "ansi_map.callingfeaturesindicator.epefa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x03, + "TDMA Enhanced Privacy and Encryption:FeatureActivity.TDMA EPE-FA", HFILL }}, + + + { &hf_ansi_map_callingfeaturesindicator_cdfa, + { "Call Delivery: FeatureActivity, CD-FA", "ansi_map.callingfeaturesindicator.cdfa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x0c, + "Call Delivery: FeatureActivity, CD-FA", HFILL }}, + { &hf_ansi_map_callingfeaturesindicator_vpfa, + { "Voice Privacy FeatureActivity, VP-FA", "ansi_map.callingfeaturesindicator.vpfa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x30, + "Voice Privacy FeatureActivity, VP-FA", HFILL }}, + { &hf_ansi_map_callingfeaturesindicator_ctfa, + { "Call Transfer: FeatureActivity, CT-FA", "ansi_map.callingfeaturesindicator.ctfa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0xc0, + "Call Transfer: FeatureActivity, CT-FA", HFILL }}, + + { &hf_ansi_map_callingfeaturesindicator_cnip1fa, + { "One number (network-provided only) Calling Number Identification Presentation: FeatureActivity CNIP1-FA", "ansi_map.callingfeaturesindicator.cnip1fa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x03, + "One number (network-provided only) Calling Number Identification Presentation: FeatureActivity CNIP1-FA", HFILL }}, + { &hf_ansi_map_callingfeaturesindicator_cnip2fa, + { "Two number (network-provided and user-provided) Calling Number Identification Presentation: FeatureActivity CNIP2-FA", "ansi_map.callingfeaturesindicator.cnip2fa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x0c, + "Two number (network-provided and user-provided) Calling Number Identification Presentation: FeatureActivity CNIP2-FA", HFILL }}, + { &hf_ansi_map_callingfeaturesindicator_cnirfa, + { "Calling Number Identification Restriction: FeatureActivity CNIR-FA", "ansi_map.callingfeaturesindicator.cnirfa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x30, + "Calling Number Identification Restriction: FeatureActivity CNIR-FA", HFILL }}, + { &hf_ansi_map_callingfeaturesindicator_cniroverfa, + { "Calling Number Identification Restriction Override FeatureActivity CNIROver-FA", "ansi_map.callingfeaturesindicator.cniroverfa", + FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0xc0, + "", HFILL }}, + + { &hf_ansi_map_cdmacallmode_cdma, + { "Call Mode", "ansi_map.cdmacallmode.cdma", + FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cdma_bool_val),0x01, + "Call Mode", HFILL }}, + { &hf_ansi_map_cdmacallmode_amps, + { "Call Mode", "ansi_map.ocdmacallmode.amps", + FT_BOOLEAN, 8, TFS(&ansi_map_CallMode_amps_bool_val),0x02, + "Call Mode", HFILL }}, + { &hf_ansi_map_cdmacallmode_namps, + { "Call Mode", "ansi_map.cdmacallmode.namps", + FT_BOOLEAN, 8, TFS(&ansi_map_CallMode_namps_bool_val),0x04, + "Call Mode", HFILL }}, + { &hf_ansi_map_cdmacallmode_cls1, + { "Call Mode", "ansi_map.cdmacallmode.cls1", + FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls1_bool_val),0x08, + "Call Mode", HFILL }}, + { &hf_ansi_map_cdmacallmode_cls2, + { "Call Mode", "ansi_map.cdmacallmode.cls2", + FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls2_bool_val),0x10, + "Call Mode", HFILL }}, + { &hf_ansi_map_cdmacallmode_cls3, + { "Call Mode", "ansi_map.cdmacallmode.cls3", + FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls3_bool_val),0x20, + "Call Mode", HFILL }}, + { &hf_ansi_map_cdmacallmode_cls4, + { "Call Mode", "ansi_map.cdmacallmode.cls4", + FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls4_bool_val),0x40, + "Call Mode", HFILL }}, + { &hf_ansi_map_cdmacallmode_cls5, + { "Call Mode", "ansi_map.cdmacallmode.cls5", + FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls5_bool_val),0x80, + "Call Mode", HFILL }}, + { &hf_ansi_map_cdmacallmode_cls6, + { "Call Mode", "ansi_map.cdmacallmode.cls6", + FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls6_bool_val),0x01, + "Call Mode", HFILL }}, + { &hf_ansi_map_cdmacallmode_cls7, + { "Call Mode", "ansi_map.cdmacallmode.cls7", + FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls7_bool_val),0x02, + "Call Mode", HFILL }}, + { &hf_ansi_map_cdmacallmode_cls8, + { "Call Mode", "ansi_map.cdmacallmode.cls8", + FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls8_bool_val),0x04, + "Call Mode", HFILL }}, + { &hf_ansi_map_cdmacallmode_cls9, + { "Call Mode", "ansi_map.cdmacallmode.cls9", + FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls9_bool_val),0x08, + "Call Mode", HFILL }}, + { &hf_ansi_map_cdmacallmode_cls10, + { "Call Mode", "ansi_map.cdmacallmode.cls10", + FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls10_bool_val),0x10, + "Call Mode", HFILL }}, + + { &hf_ansi_map_cdmastationclassmark_pc, + { "Power Class: (PC)", "ansi_map.cdmastationclassmark.pc", + FT_UINT8, BASE_DEC, VALS(ansi_map_CDMAStationClassMark_pc_vals), 0x03, + "Power Class: (PC)", HFILL }}, + + { &hf_ansi_map_cdmastationclassmark_dtx, + { "Analog Transmission: (DTX)", "ansi_map.cdmastationclassmark.dtx", + FT_BOOLEAN, 8, TFS(&ansi_map_CDMAStationClassMark_dtx_bool_val),0x04, + "Analog Transmission: (DTX)", HFILL }}, + { &hf_ansi_map_cdmastationclassmark_smi, + { " Slotted Mode Indicator: (SMI)", "ansi_map.cdmastationclassmark.smi", + FT_BOOLEAN, 8, TFS(&ansi_map_CDMAStationClassMark_smi_bool_val),0x20, + " Slotted Mode Indicator: (SMI)", HFILL }}, + { &hf_ansi_map_cdmastationclassmark_dmi, + { "Dual-mode Indicator(DMI)", "ansi_map.cdmastationclassmark.dmi", + FT_BOOLEAN, 8, TFS(&ansi_map_CDMAStationClassMark_dmi_bool_val),0x40, + "Dual-mode Indicator(DMI)", HFILL }}, + { &hf_ansi_map_channeldata_vmac, + { "Voice Mobile Attenuation Code (VMAC)", "ansi_map.channeldata.vmac", + FT_UINT8, BASE_DEC, NULL, 0x07, + "Voice Mobile Attenuation Code (VMAC)", HFILL }}, + { &hf_ansi_map_channeldata_dtx, + { "Discontinuous Transmission Mode (DTX)", "ansi_map.channeldata.dtx", + FT_UINT8, BASE_DEC, VALS(ansi_map_ChannelData_dtx_vals), 0x18, + "Discontinuous Transmission Mode (DTX)", HFILL }}, + { &hf_ansi_map_channeldata_scc, + { "SAT Color Code (SCC)", "ansi_map.channeldata.scc", + FT_UINT8, BASE_DEC, NULL, 0xc0, + "SAT Color Code (SCC)", HFILL }}, + { &hf_ansi_map_channeldata_chno, + { "Channel Number (CHNO)", "ansi_map.channeldata.chno", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Channel Number (CHNO)", HFILL }}, + { &hf_ansi_map_ConfidentialityModes_vp, + { "Voice Privacy (VP) Confidentiality Status", "ansi_map.confidentialitymodes.vp", + FT_BOOLEAN, 8, TFS(&ansi_map_ConfidentialityModes_bool_val),0x01, + "Voice Privacy (VP) Confidentiality Status", HFILL }}, + { &hf_ansi_map_ConfidentialityModes_se, + { "Signaling Message Encryption (SE) Confidentiality Status", "ansi_map.confidentialitymodes.se", + FT_BOOLEAN, 8, TFS(&ansi_map_ConfidentialityModes_bool_val),0x02, + "Signaling Message Encryption (SE) Confidentiality Status", HFILL }}, + { &hf_ansi_map_ConfidentialityModes_dp, + { "DataPrivacy (DP) Confidentiality Status", "ansi_map.confidentialitymodes.dp", + FT_BOOLEAN, 8, TFS(&ansi_map_ConfidentialityModes_bool_val),0x04, + "DataPrivacy (DP) Confidentiality Status", HFILL }}, + + { &hf_ansi_map_deniedauthorizationperiod_period, + { "Period", "ansi_map.deniedauthorizationperiod.period", + FT_UINT8, BASE_DEC, VALS(ansi_map_deniedauthorizationperiod_period_vals), 0x0, + "Period", HFILL }}, + + + { &hf_ansi_map_originationtriggers_all, + { "All Origination (All)", "ansi_map.originationtriggers.all", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_all_bool_val),0x01, + "All Origination (All)", HFILL }}, + { &hf_ansi_map_originationtriggers_local, + { "Local", "ansi_map.originationtriggers.all", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_local_bool_val),0x02, + "Local", HFILL }}, + { &hf_ansi_map_originationtriggers_ilata, + { "Intra-LATA Toll (ILATA)", "ansi_map.originationtriggers.ilata", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_ilata_bool_val),0x04, + "Intra-LATA Toll (ILATA)", HFILL }}, + { &hf_ansi_map_originationtriggers_olata, + { "Inter-LATA Toll (OLATA)", "ansi_map.originationtriggers.olata", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_olata_bool_val),0x08, + "Inter-LATA Toll (OLATA)", HFILL }}, + { &hf_ansi_map_originationtriggers_int, + { "International (Int'l )", "ansi_map.originationtriggers.int", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_int_bool_val),0x10, + "International (Int'l )", HFILL }}, + { &hf_ansi_map_originationtriggers_wz, + { "World Zone (WZ)", "ansi_map.originationtriggers.wz", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_wz_bool_val),0x20, + "World Zone (WZ)", HFILL }}, + { &hf_ansi_map_originationtriggers_unrec, + { "Unrecognized Number (Unrec)", "ansi_map.originationtriggers.unrec", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_unrec_bool_val),0x40, + "Unrecognized Number (Unrec)", HFILL }}, + { &hf_ansi_map_originationtriggers_rvtc, + { "Revertive Call (RvtC)", "ansi_map.originationtriggers.rvtc", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_rvtc_bool_val),0x80, + "Revertive Call (RvtC)", HFILL }}, + { &hf_ansi_map_originationtriggers_star, + { "Star", "ansi_map.originationtriggers.star", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_star_bool_val),0x01, + "Star", HFILL }}, + { &hf_ansi_map_originationtriggers_ds, + { "Double Star (DS)", "ansi_map.originationtriggers.ds", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_ds_bool_val),0x02, + "Double Star (DS)", HFILL }}, + { &hf_ansi_map_originationtriggers_pound, + { "Pound", "ansi_map.originationtriggers.pound", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_pound_bool_val),0x04, + "Pound", HFILL }}, + { &hf_ansi_map_originationtriggers_dp, + { "Double Pound (DP)", "ansi_map.originationtriggers.dp", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_dp_bool_val),0x08, + "Double Pound (DP)", HFILL }}, + { &hf_ansi_map_originationtriggers_pa, + { "Prior Agreement (PA)", "ansi_map.originationtriggers.pa", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_pa_bool_val),0x10, + "Prior Agreement (PA)", HFILL }}, + { &hf_ansi_map_originationtriggers_nodig, + { "No digits", "ansi_map.originationtriggers.nodig", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_nodig_bool_val),0x01, + "No digits", HFILL }}, + { &hf_ansi_map_originationtriggers_onedig, + { "1 digit", "ansi_map.originationtriggers.onedig", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_onedig_bool_val),0x02, + "1 digit", HFILL }}, + { &hf_ansi_map_originationtriggers_twodig, + { "2 digits", "ansi_map.originationtriggers.twodig", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_twodig_bool_val),0x04, + "2 digits", HFILL }}, + { &hf_ansi_map_originationtriggers_threedig, + { "3 digits", "ansi_map.originationtriggers.threedig", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_threedig_bool_val),0x08, + "3 digits", HFILL }}, + { &hf_ansi_map_originationtriggers_fourdig, + { "4 digits", "ansi_map.originationtriggers.fourdig", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_fourdig_bool_val),0x10, + "4 digits", HFILL }}, + { &hf_ansi_map_originationtriggers_fivedig, + { "5 digits", "ansi_map.originationtriggers.fivedig", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_fivedig_bool_val),0x20, + "5 digits", HFILL }}, + { &hf_ansi_map_originationtriggers_sixdig, + { "6 digits", "ansi_map.originationtriggers.sixdig", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_sixdig_bool_val),0x40, + "6 digits", HFILL }}, + { &hf_ansi_map_originationtriggers_sevendig, + { "7 digits", "ansi_map.originationtriggers.sevendig", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_sevendig_bool_val),0x80, + "7 digits", HFILL }}, + { &hf_ansi_map_originationtriggers_eightdig, + { "8 digits", "ansi_map.originationtriggers.eight", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_eightdig_bool_val),0x01, + "8 digits", HFILL }}, + { &hf_ansi_map_originationtriggers_ninedig, + { "9 digits", "ansi_map.originationtriggers.nine", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_ninedig_bool_val),0x02, + "9 digits", HFILL }}, + { &hf_ansi_map_originationtriggers_tendig, + { "10 digits", "ansi_map.originationtriggers.ten", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_tendig_bool_val),0x04, + "10 digits", HFILL }}, + { &hf_ansi_map_originationtriggers_elevendig, + { "11 digits", "ansi_map.originationtriggers.eleven", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_elevendig_bool_val),0x08, + "11 digits", HFILL }}, + { &hf_ansi_map_originationtriggers_thwelvedig, + { "12 digits", "ansi_map.originationtriggers.thwelv", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_thwelvdig_bool_val),0x10, + "12 digits", HFILL }}, + { &hf_ansi_map_originationtriggers_thirteendig, + { "13 digits", "ansi_map.originationtriggers.thirteen", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_thirteendig_bool_val),0x20, + "13 digits", HFILL }}, + { &hf_ansi_map_originationtriggers_fourteendig, + { "14 digits", "ansi_map.originationtriggers.fourteen", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_fourteendig_bool_val),0x40, + "14 digits", HFILL }}, + { &hf_ansi_map_originationtriggers_fifteendig, + { "15 digits", "ansi_map.originationtriggers.fifteen", + FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_fifteendig_bool_val),0x80, + "15 digits", HFILL }}, + + { &hf_ansi_map_triggercapability_init, + { "Introducing Star/Pound (INIT)", "ansi_map.triggercapability.init", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x01, + "Introducing Star/Pound (INIT)", HFILL }}, + { &hf_ansi_map_triggercapability_kdigit, + { "K-digit (K-digit)", "ansi_map.triggercapability.kdigit", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x02, + "K-digit (K-digit)", HFILL }}, + { &hf_ansi_map_triggercapability_all, + { "All_Calls (All)", "ansi_map.triggercapability.all", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x04, + "All_Calls (All)", HFILL }}, + { &hf_ansi_map_triggercapability_rvtc, + { "Revertive_Call (RvtC)", "ansi_map.triggercapability.rvtc", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x08, + "Revertive_Call (RvtC)", HFILL }}, + { &hf_ansi_map_triggercapability_oaa, + { "Origination_Attempt_Authorized (OAA)", "ansi_map.triggercapability.oaa", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x10, + "Origination_Attempt_Authorized (OAA)", HFILL }}, + { &hf_ansi_map_triggercapability_oans, + { "O_Answer (OANS)", "ansi_map.triggercapability.oans", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x20, + "O_Answer (OANS)", HFILL }}, + { &hf_ansi_map_triggercapability_odisc, + { "O_Disconnect (ODISC)", "ansi_map.triggercapability.odisc", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x40, + "O_Disconnect (ODISC)", HFILL }}, + { &hf_ansi_map_triggercapability_ona, + { "O_No_Answer (ONA)", "ansi_map.triggercapability.ona", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x80, + "O_No_Answer (ONA)", HFILL }}, + + { &hf_ansi_map_triggercapability_ct , + { "Call Types (CT)", "ansi_map.triggercapability.ona", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x01, + "Call Types (CT)", HFILL }}, + { &hf_ansi_map_triggercapability_unrec, + { "Unrecognized_Number (Unrec)", "ansi_map.triggercapability.unrec", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x02, + "Unrecognized_Number (Unrec)", HFILL }}, + { &hf_ansi_map_triggercapability_pa, + { "Prior_Agreement (PA)", "ansi_map.triggercapability.pa", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x04, + "Prior_Agreement (PA)", HFILL }}, + { &hf_ansi_map_triggercapability_at, + { "Advanced_Termination (AT)", "ansi_map.triggercapability.at", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x08, + "Advanced_Termination (AT)", HFILL }}, + { &hf_ansi_map_triggercapability_cgraa, + { "Calling_Routing_Address_Available (CgRAA)", "ansi_map.triggercapability.cgraa", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x10, + "Calling_Routing_Address_Available (CgRAA)", HFILL }}, + { &hf_ansi_map_triggercapability_it, + { "Initial_Termination (IT)", "ansi_map.triggercapability.it", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x20, + "Initial_Termination (IT)", HFILL }}, + { &hf_ansi_map_triggercapability_cdraa, + { "Called_Routing_Address_Available (CdRAA)", "ansi_map.triggercapability.cdraa", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x40, + "Called_Routing_Address_Available (CdRAA)", HFILL }}, + { &hf_ansi_map_triggercapability_obsy, + { "O_Called_Party_Busy (OBSY)", "ansi_map.triggercapability.ona", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x80, + "O_Called_Party_Busy (OBSY)", HFILL }}, + + { &hf_ansi_map_triggercapability_tra , + { "Terminating_Resource_Available (TRA)", "ansi_map.triggercapability.tra", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x01, + "Terminating_Resource_Available (TRA)", HFILL }}, + { &hf_ansi_map_triggercapability_tbusy, + { "T_Busy (TBusy)", "ansi_map.triggercapability.tbusy", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x02, + "T_Busy (TBusy)", HFILL }}, + { &hf_ansi_map_triggercapability_tna, + { "T_No_Answer (TNA)", "ansi_map.triggercapability.tna", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x04, + "T_No_Answer (TNA)", HFILL }}, + { &hf_ansi_map_triggercapability_tans, + { "T_Answer (TANS)", "ansi_map.triggercapability.tans", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x08, + "T_Answer (TANS)", HFILL }}, + { &hf_ansi_map_triggercapability_tdisc, + { "T_Disconnect (TDISC) ", "ansi_map.triggercapability.tdisc", + FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x10, + "T_Disconnect (TDISC) ", HFILL }}, + { &hf_ansi_map_winoperationscapability_conn, + { "ConnectResource (CONN)", "ansi_map.winoperationscapability.conn", + FT_BOOLEAN, 8, TFS(&ansi_map_winoperationscapability_conn_bool_val),0x01, + "ConnectResource (CONN)", HFILL }}, + { &hf_ansi_map_winoperationscapability_ccdir, + { "ConnectResource (CONN)", "ansi_map.winoperationscapability.ccdir", + FT_BOOLEAN, 8, TFS(&ansi_map_winoperationscapability_ccdir_bool_val),0x02, + "ConnectResource (CONN)", HFILL }}, + { &hf_ansi_map_winoperationscapability_pos, + { "ConnectResource (CONN)", "ansi_map.winoperationscapability.pos", + FT_BOOLEAN, 8, TFS(&ansi_map_winoperationscapability_pos_bool_val),0x04, + "ConnectResource (CONN)", HFILL }}, + { &hf_ansi_map_pacaindicator_pa, + { "Permanent Activation (PA)", "ansi_map.pacaindicator_pa", + FT_BOOLEAN, 8, TFS(&ansi_map_pacaindicator_pa_bool_val),0x01, + "Permanent Activation (PA)", HFILL }}, + { &hf_ansi_map_PACA_Level, + { "PACA Level", "ansi_map.PACA_Level", + FT_UINT8, BASE_DEC, VALS(ansi_map_PACA_Level_vals), 0x1e, + "PACA Level", HFILL }}, + + +/*--- Included file: packet-ansi_map-hfarr.c ---*/ +#line 1 "packet-ansi_map-hfarr.c" + { &hf_ansi_map_AuthenticationDirective_PDU, + { "AuthenticationDirective", "ansi_map.AuthenticationDirective", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.AuthenticationDirective", HFILL }}, + { &hf_ansi_map_AuthenticationDirectiveRes_PDU, + { "AuthenticationDirectiveRes", "ansi_map.AuthenticationDirectiveRes", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.AuthenticationDirectiveRes", HFILL }}, + { &hf_ansi_map_OriginationRequest_PDU, + { "OriginationRequest", "ansi_map.OriginationRequest", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.OriginationRequest", HFILL }}, + { &hf_ansi_map_OriginationRequestRes_PDU, + { "OriginationRequestRes", "ansi_map.OriginationRequestRes", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.OriginationRequestRes", HFILL }}, + { &hf_ansi_map_invokeLast, + { "invokeLast", "ansi_map.invokeLast", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.InvokePDU", HFILL }}, + { &hf_ansi_map_returnResultLast, + { "returnResultLast", "ansi_map.returnResultLast", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.ReturnResultPDU", HFILL }}, + { &hf_ansi_map_returnError, + { "returnError", "ansi_map.returnError", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.ReturnErrorPDU", HFILL }}, + { &hf_ansi_map_reject, + { "reject", "ansi_map.reject", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.RejectPDU", HFILL }}, + { &hf_ansi_map_invokeNotLast, + { "invokeNotLast", "ansi_map.invokeNotLast", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.InvokePDU", HFILL }}, + { &hf_ansi_map_returnResultNotLast, + { "returnResultNotLast", "ansi_map.returnResultNotLast", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.ReturnResultPDU", HFILL }}, + { &hf_ansi_map_componentIDs, + { "componentIDs", "ansi_map.componentIDs", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.OCTET_STRING_SIZE_0_2", HFILL }}, + { &hf_ansi_map_operationCode, + { "operationCode", "ansi_map.operationCode", + FT_UINT32, BASE_DEC, VALS(ansi_map_OperationCode_vals), 0, + "ansi_map.OperationCode", HFILL }}, + { &hf_ansi_map_invokeParameters, + { "invokeParameters", "ansi_map.invokeParameters", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.InvokeParameters", HFILL }}, + { &hf_ansi_map_componentID, + { "componentID", "ansi_map.componentID", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ComponentID", HFILL }}, + { &hf_ansi_map_returnResult, + { "returnResult", "ansi_map.returnResult", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.ReturnParameters", HFILL }}, + { &hf_ansi_map_errorCode, + { "errorCode", "ansi_map.errorCode", + FT_UINT32, BASE_DEC, VALS(ansi_map_ErrorCode_vals), 0, + "ansi_map.ErrorCode", HFILL }}, + { &hf_ansi_map_parameterre, + { "parameterre", "ansi_map.parameterre", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.RejectParameters", HFILL }}, + { &hf_ansi_map_rejectProblem, + { "rejectProblem", "ansi_map.rejectProblem", + FT_INT32, BASE_DEC, VALS(ansi_map_ProblemPDU_vals), 0, + "ansi_map.ProblemPDU", HFILL }}, + { &hf_ansi_map_parameterrj, + { "parameterrj", "ansi_map.parameterrj", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.RejectParameters", HFILL }}, + { &hf_ansi_map_national, + { "national", "ansi_map.national", + FT_INT32, BASE_DEC, NULL, 0, + "ansi_map.INTEGER_M32768_32767", HFILL }}, + { &hf_ansi_map_private, + { "private", "ansi_map.private", + FT_INT32, BASE_DEC, NULL, 0, + "ansi_map.PrivateOperationCode", HFILL }}, + { &hf_ansi_map_nationaler, + { "nationaler", "ansi_map.nationaler", + FT_INT32, BASE_DEC, NULL, 0, + "ansi_map.INTEGER_M32768_32767", HFILL }}, + { &hf_ansi_map_privateer, + { "privateer", "ansi_map.privateer", + FT_INT32, BASE_DEC, NULL, 0, + "ansi_map.INTEGER", HFILL }}, + { &hf_ansi_map_electronicSerialNumber, + { "electronicSerialNumber", "ansi_map.electronicSerialNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ElectronicSerialNumber", HFILL }}, + { &hf_ansi_map_msid, + { "msid", "ansi_map.msid", + FT_UINT32, BASE_DEC, VALS(ansi_map_MSID_vals), 0, + "ansi_map.MSID", HFILL }}, + { &hf_ansi_map_authenticationAlgorithmVersion, + { "authenticationAlgorithmVersion", "ansi_map.authenticationAlgorithmVersion", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.AuthenticationAlgorithmVersion", HFILL }}, + { &hf_ansi_map_authenticationResponseReauthentication, + { "authenticationResponseReauthentication", "ansi_map.authenticationResponseReauthentication", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.AuthenticationResponseReauthentication", HFILL }}, + { &hf_ansi_map_authenticationResponseUniqueChallenge, + { "authenticationResponseUniqueChallenge", "ansi_map.authenticationResponseUniqueChallenge", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.AuthenticationResponseUniqueChallenge", HFILL }}, + { &hf_ansi_map_callHistoryCount, + { "callHistoryCount", "ansi_map.callHistoryCount", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.CallHistoryCount", HFILL }}, + { &hf_ansi_map_cdmaPrivateLongCodeMask, + { "cdmaPrivateLongCodeMask", "ansi_map.cdmaPrivateLongCodeMask", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAPrivateLongCodeMask", HFILL }}, + { &hf_ansi_map_carrierDigits, + { "carrierDigits", "ansi_map.carrierDigits", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CarrierDigits", HFILL }}, + { &hf_ansi_map_denyAccess, + { "denyAccess", "ansi_map.denyAccess", + FT_UINT32, BASE_DEC, VALS(ansi_map_DenyAccess_vals), 0, + "ansi_map.DenyAccess", HFILL }}, + { &hf_ansi_map_destinationDigits, + { "destinationDigits", "ansi_map.destinationDigits", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.DestinationDigits", HFILL }}, + { &hf_ansi_map_locationAreaID, + { "locationAreaID", "ansi_map.locationAreaID", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.LocationAreaID", HFILL }}, + { &hf_ansi_map_randomVariableReauthentication, + { "randomVariableReauthentication", "ansi_map.randomVariableReauthentication", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RandomVariableReauthentication", HFILL }}, + { &hf_ansi_map_mobileStationMIN, + { "mobileStationMIN", "ansi_map.mobileStationMIN", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.MobileStationMIN", HFILL }}, + { &hf_ansi_map_mscid, + { "mscid", "ansi_map.mscid", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.MSCID", HFILL }}, + { &hf_ansi_map_randomVariableSSD, + { "randomVariableSSD", "ansi_map.randomVariableSSD", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RandomVariableSSD", HFILL }}, + { &hf_ansi_map_randomVariableUniqueChallenge, + { "randomVariableUniqueChallenge", "ansi_map.randomVariableUniqueChallenge", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RandomVariableUniqueChallenge", HFILL }}, + { &hf_ansi_map_routingDigits, + { "routingDigits", "ansi_map.routingDigits", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RoutingDigits", HFILL }}, + { &hf_ansi_map_senderIdentificationNumber, + { "senderIdentificationNumber", "ansi_map.senderIdentificationNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SenderIdentificationNumber", HFILL }}, + { &hf_ansi_map_sharedSecretData, + { "sharedSecretData", "ansi_map.sharedSecretData", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SharedSecretData", HFILL }}, + { &hf_ansi_map_signalingMessageEncryptionKey, + { "signalingMessageEncryptionKey", "ansi_map.signalingMessageEncryptionKey", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SignalingMessageEncryptionKey", HFILL }}, + { &hf_ansi_map_ssdnotShared, + { "ssdnotShared", "ansi_map.ssdnotShared", + FT_UINT32, BASE_DEC, VALS(ansi_map_SSDNotShared_vals), 0, + "ansi_map.SSDNotShared", HFILL }}, + { &hf_ansi_map_updateCount, + { "updateCount", "ansi_map.updateCount", + FT_UINT32, BASE_DEC, VALS(ansi_map_UpdateCount_vals), 0, + "ansi_map.UpdateCount", HFILL }}, + { &hf_ansi_map_interMSCCircuitID, + { "interMSCCircuitID", "ansi_map.interMSCCircuitID", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.InterMSCCircuitID", HFILL }}, + { &hf_ansi_map_mobileIdentificationNumber, + { "mobileIdentificationNumber", "ansi_map.mobileIdentificationNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.MobileIdentificationNumber", HFILL }}, + { &hf_ansi_map_countUpdateReport, + { "countUpdateReport", "ansi_map.countUpdateReport", + FT_UINT8, BASE_DEC, VALS(ansi_map_CountUpdateReport_vals), 0, + "ansi_map.CountUpdateReport", HFILL }}, + { &hf_ansi_map_uniqueChallengeReport, + { "uniqueChallengeReport", "ansi_map.uniqueChallengeReport", + FT_UINT8, BASE_DEC, VALS(ansi_map_UniqueChallengeReport_vals), 0, + "ansi_map.UniqueChallengeReport", HFILL }}, + { &hf_ansi_map_reportType, + { "reportType", "ansi_map.reportType", + FT_UINT32, BASE_DEC, VALS(ansi_map_ReportType_vals), 0, + "ansi_map.ReportType", HFILL }}, + { &hf_ansi_map_systemAccessType, + { "systemAccessType", "ansi_map.systemAccessType", + FT_UINT32, BASE_DEC, VALS(ansi_map_SystemAccessType_vals), 0, + "ansi_map.SystemAccessType", HFILL }}, + { &hf_ansi_map_systemCapabilities, + { "systemCapabilities", "ansi_map.systemCapabilities", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SystemCapabilities", HFILL }}, + { &hf_ansi_map_callHistoryCountExpected, + { "callHistoryCountExpected", "ansi_map.callHistoryCountExpected", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.CallHistoryCountExpected", HFILL }}, + { &hf_ansi_map_reportType2, + { "reportType2", "ansi_map.reportType2", + FT_UINT32, BASE_DEC, VALS(ansi_map_ReportType_vals), 0, + "ansi_map.ReportType", HFILL }}, + { &hf_ansi_map_terminalType, + { "terminalType", "ansi_map.terminalType", + FT_UINT32, BASE_DEC, VALS(ansi_map_TerminalType_vals), 0, + "ansi_map.TerminalType", HFILL }}, + { &hf_ansi_map_authenticationData, + { "authenticationData", "ansi_map.authenticationData", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.AuthenticationData", HFILL }}, + { &hf_ansi_map_authenticationResponse, + { "authenticationResponse", "ansi_map.authenticationResponse", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.AuthenticationResponse", HFILL }}, + { &hf_ansi_map_cdmaNetworkIdentification, + { "cdmaNetworkIdentification", "ansi_map.cdmaNetworkIdentification", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMANetworkIdentification", HFILL }}, + { &hf_ansi_map_confidentialityModes, + { "confidentialityModes", "ansi_map.confidentialityModes", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ConfidentialityModes", HFILL }}, + { &hf_ansi_map_controlChannelMode, + { "controlChannelMode", "ansi_map.controlChannelMode", + FT_UINT8, BASE_DEC, VALS(ansi_map_ControlChannelMode_vals), 0, + "ansi_map.ControlChannelMode", HFILL }}, + { &hf_ansi_map_digits, + { "digits", "ansi_map.digits", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.Digits", HFILL }}, + { &hf_ansi_map_pc_ssn, + { "pc-ssn", "ansi_map.pc_ssn", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.PC_SSN", HFILL }}, + { &hf_ansi_map_randomVariable, + { "randomVariable", "ansi_map.randomVariable", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RandomVariable", HFILL }}, + { &hf_ansi_map_serviceRedirectionCause, + { "serviceRedirectionCause", "ansi_map.serviceRedirectionCause", + FT_UINT8, BASE_DEC, VALS(ansi_map_ServiceRedirectionCause_type_vals), 0, + "ansi_map.ServiceRedirectionCause", HFILL }}, + { &hf_ansi_map_suspiciousAccess, + { "suspiciousAccess", "ansi_map.suspiciousAccess", + FT_UINT32, BASE_DEC, VALS(ansi_map_SuspiciousAccess_vals), 0, + "ansi_map.SuspiciousAccess", HFILL }}, + { &hf_ansi_map_transactionCapability, + { "transactionCapability", "ansi_map.transactionCapability", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.TransactionCapability", HFILL }}, + { &hf_ansi_map_analogRedirectRecord, + { "analogRedirectRecord", "ansi_map.analogRedirectRecord", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.AnalogRedirectRecord", HFILL }}, + { &hf_ansi_map_cdmaRedirectRecord, + { "cdmaRedirectRecord", "ansi_map.cdmaRedirectRecord", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.CDMARedirectRecord", HFILL }}, + { &hf_ansi_map_dataKey, + { "dataKey", "ansi_map.dataKey", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.DataKey", HFILL }}, + { &hf_ansi_map_roamingIndication, + { "roamingIndication", "ansi_map.roamingIndication", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RoamingIndication", HFILL }}, + { &hf_ansi_map_serviceRedirectionInfo, + { "serviceRedirectionInfo", "ansi_map.serviceRedirectionInfo", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ServiceRedirectionInfo", HFILL }}, + { &hf_ansi_map_voicePrivacyMask, + { "voicePrivacyMask", "ansi_map.voicePrivacyMask", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.VoicePrivacyMask", HFILL }}, + { &hf_ansi_map_reauthenticationReport, + { "reauthenticationReport", "ansi_map.reauthenticationReport", + FT_UINT8, BASE_DEC, VALS(ansi_map_ReauthenticationReport_vals), 0, + "ansi_map.ReauthenticationReport", HFILL }}, + { &hf_ansi_map_serviceIndicator, + { "serviceIndicator", "ansi_map.serviceIndicator", + FT_UINT8, BASE_DEC, VALS(ansi_map_ServiceIndicator_vals), 0, + "ansi_map.ServiceIndicator", HFILL }}, + { &hf_ansi_map_signalingMessageEncryptionReport, + { "signalingMessageEncryptionReport", "ansi_map.signalingMessageEncryptionReport", + FT_UINT8, BASE_DEC, VALS(ansi_map_SMEReport_vals), 0, + "ansi_map.SignalingMessageEncryptionReport", HFILL }}, + { &hf_ansi_map_ssdUpdateReport, + { "ssdUpdateReport", "ansi_map.ssdUpdateReport", + FT_UINT16, BASE_DEC, VALS(ansi_map_SSDUpdateReport_vals), 0, + "ansi_map.SSDUpdateReport", HFILL }}, + { &hf_ansi_map_voicePrivacyReport, + { "voicePrivacyReport", "ansi_map.voicePrivacyReport", + FT_UINT8, BASE_DEC, VALS(ansi_map_VoicePrivacyReport_vals), 0, + "ansi_map.VoicePrivacyReport", HFILL }}, + { &hf_ansi_map_randomVariableBaseStation, + { "randomVariableBaseStation", "ansi_map.randomVariableBaseStation", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RandomVariableBaseStation", HFILL }}, + { &hf_ansi_map_authenticationResponseBaseStation, + { "authenticationResponseBaseStation", "ansi_map.authenticationResponseBaseStation", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.AuthenticationResponseBaseStation", HFILL }}, + { &hf_ansi_map_billingID, + { "billingID", "ansi_map.billingID", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.BillingID", HFILL }}, + { &hf_ansi_map_channelData, + { "channelData", "ansi_map.channelData", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ChannelData", HFILL }}, + { &hf_ansi_map_interSwitchCount, + { "interSwitchCount", "ansi_map.interSwitchCount", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.InterSwitchCount", HFILL }}, + { &hf_ansi_map_servingCellID, + { "servingCellID", "ansi_map.servingCellID", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ServingCellID", HFILL }}, + { &hf_ansi_map_stationClassMark, + { "stationClassMark", "ansi_map.stationClassMark", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.StationClassMark", HFILL }}, + { &hf_ansi_map_targetCellID, + { "targetCellID", "ansi_map.targetCellID", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.TargetCellID", HFILL }}, + { &hf_ansi_map_handoffReason, + { "handoffReason", "ansi_map.handoffReason", + FT_UINT32, BASE_DEC, VALS(ansi_map_HandoffReason_vals), 0, + "ansi_map.HandoffReason", HFILL }}, + { &hf_ansi_map_handoffState, + { "handoffState", "ansi_map.handoffState", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.HandoffState", HFILL }}, + { &hf_ansi_map_tdmaBurstIndicator, + { "tdmaBurstIndicator", "ansi_map.tdmaBurstIndicator", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.TDMABurstIndicator", HFILL }}, + { &hf_ansi_map_tdmaCallMode, + { "tdmaCallMode", "ansi_map.tdmaCallMode", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.TDMACallMode", HFILL }}, + { &hf_ansi_map_tdmaChannelData, + { "tdmaChannelData", "ansi_map.tdmaChannelData", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.TDMAChannelData", HFILL }}, + { &hf_ansi_map_baseStationManufacturerCode, + { "baseStationManufacturerCode", "ansi_map.baseStationManufacturerCode", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.BaseStationManufacturerCode", HFILL }}, + { &hf_ansi_map_alertCode, + { "alertCode", "ansi_map.alertCode", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.AlertCode", HFILL }}, + { &hf_ansi_map_cdma2000HandoffInvokeIOSData, + { "cdma2000HandoffInvokeIOSData", "ansi_map.cdma2000HandoffInvokeIOSData", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMA2000HandoffInvokeIOSData", HFILL }}, + { &hf_ansi_map_cdmaCallMode, + { "cdmaCallMode", "ansi_map.cdmaCallMode", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMACallMode", HFILL }}, + { &hf_ansi_map_cdmaChannelData, + { "cdmaChannelData", "ansi_map.cdmaChannelData", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAChannelData", HFILL }}, + { &hf_ansi_map_cdmaConnectionReferenceList, + { "cdmaConnectionReferenceList", "ansi_map.cdmaConnectionReferenceList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.CDMAConnectionReferenceList", HFILL }}, + { &hf_ansi_map_cdmaMobileProtocolRevision, + { "cdmaMobileProtocolRevision", "ansi_map.cdmaMobileProtocolRevision", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAMobileProtocolRevision", HFILL }}, + { &hf_ansi_map_cdmaMSMeasuredChannelIdentity, + { "cdmaMSMeasuredChannelIdentity", "ansi_map.cdmaMSMeasuredChannelIdentity", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAMSMeasuredChannelIdentity", HFILL }}, + { &hf_ansi_map_cdmaServiceConfigurationRecord, + { "cdmaServiceConfigurationRecord", "ansi_map.cdmaServiceConfigurationRecord", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAServiceConfigurationRecord", HFILL }}, + { &hf_ansi_map_cdmaServiceOptionList, + { "cdmaServiceOptionList", "ansi_map.cdmaServiceOptionList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.CDMAServiceOptionList", HFILL }}, + { &hf_ansi_map_cdmaServingOneWayDelay, + { "cdmaServingOneWayDelay", "ansi_map.cdmaServingOneWayDelay", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAServingOneWayDelay", HFILL }}, + { &hf_ansi_map_cdmaStationClassMark, + { "cdmaStationClassMark", "ansi_map.cdmaStationClassMark", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAStationClassMark", HFILL }}, + { &hf_ansi_map_cdmaStationClassMark2, + { "cdmaStationClassMark2", "ansi_map.cdmaStationClassMark2", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAStationClassMark2", HFILL }}, + { &hf_ansi_map_cdmaTargetMAHOList, + { "cdmaTargetMAHOList", "ansi_map.cdmaTargetMAHOList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.CDMATargetMAHOList", HFILL }}, + { &hf_ansi_map_cdmaTargetMeasurementList, + { "cdmaTargetMeasurementList", "ansi_map.cdmaTargetMeasurementList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.CDMATargetMeasurementList", HFILL }}, + { &hf_ansi_map_dataPrivacyParameters, + { "dataPrivacyParameters", "ansi_map.dataPrivacyParameters", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.DataPrivacyParameters", HFILL }}, + { &hf_ansi_map_ilspInformation, + { "ilspInformation", "ansi_map.ilspInformation", + FT_UINT8, BASE_DEC, VALS(ansi_map_islp_type_vals), 0, + "ansi_map.ISLPInformation", HFILL }}, + { &hf_ansi_map_msLocation, + { "msLocation", "ansi_map.msLocation", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.MSLocation", HFILL }}, + { &hf_ansi_map_nampsCallMode, + { "nampsCallMode", "ansi_map.nampsCallMode", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.NAMPSCallMode", HFILL }}, + { &hf_ansi_map_nampsChannelData, + { "nampsChannelData", "ansi_map.nampsChannelData", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.NAMPSChannelData", HFILL }}, + { &hf_ansi_map_nonPublicData, + { "nonPublicData", "ansi_map.nonPublicData", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.NonPublicData", HFILL }}, + { &hf_ansi_map_pdsnAddress, + { "pdsnAddress", "ansi_map.pdsnAddress", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.PDSNAddress", HFILL }}, + { &hf_ansi_map_pdsnProtocolType, + { "pdsnProtocolType", "ansi_map.pdsnProtocolType", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.PDSNProtocolType", HFILL }}, + { &hf_ansi_map_qosPriority, + { "qosPriority", "ansi_map.qosPriority", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.QoSPriority", HFILL }}, + { &hf_ansi_map_systemOperatorCode, + { "systemOperatorCode", "ansi_map.systemOperatorCode", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SystemOperatorCode", HFILL }}, + { &hf_ansi_map_tdmaBandwidth, + { "tdmaBandwidth", "ansi_map.tdmaBandwidth", + FT_UINT8, BASE_DEC, VALS(ansi_map_TDMABandwidth_vals), 0x0f, + "ansi_map.TDMABandwidth", HFILL }}, + { &hf_ansi_map_tdmaServiceCode, + { "tdmaServiceCode", "ansi_map.tdmaServiceCode", + FT_UINT8, BASE_DEC, VALS(ansi_map_TDMAServiceCode_vals), 0, + "ansi_map.TDMAServiceCode", HFILL }}, + { &hf_ansi_map_tdmaTerminalCapability, + { "tdmaTerminalCapability", "ansi_map.tdmaTerminalCapability", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.TDMATerminalCapability", HFILL }}, + { &hf_ansi_map_tdmaVoiceCoder, + { "tdmaVoiceCoder", "ansi_map.tdmaVoiceCoder", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.TDMAVoiceCoder", HFILL }}, + { &hf_ansi_map_userZoneData, + { "userZoneData", "ansi_map.userZoneData", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.UserZoneData", HFILL }}, + { &hf_ansi_map_bsmcstatus, + { "bsmcstatus", "ansi_map.bsmcstatus", + FT_UINT8, BASE_DEC, VALS(ansi_map_BSMCStatus_vals), 0x03, + "ansi_map.BSMCStatus", HFILL }}, + { &hf_ansi_map_cdma2000HandoffResponseIOSData, + { "cdma2000HandoffResponseIOSData", "ansi_map.cdma2000HandoffResponseIOSData", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMA2000HandoffResponseIOSData", HFILL }}, + { &hf_ansi_map_cdmaCodeChannelList, + { "cdmaCodeChannelList", "ansi_map.cdmaCodeChannelList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.CDMACodeChannelList", HFILL }}, + { &hf_ansi_map_cdmaSearchParameters, + { "cdmaSearchParameters", "ansi_map.cdmaSearchParameters", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMASearchParameters", HFILL }}, + { &hf_ansi_map_cdmaSearchWindow, + { "cdmaSearchWindow", "ansi_map.cdmaSearchWindow", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMASearchWindow", HFILL }}, + { &hf_ansi_map_sOCStatus, + { "sOCStatus", "ansi_map.sOCStatus", + FT_UINT8, BASE_DEC, VALS(ansi_map_SOCStatus_vals), 0x03, + "ansi_map.SOCStatus", HFILL }}, + { &hf_ansi_map_releaseReason, + { "releaseReason", "ansi_map.releaseReason", + FT_UINT32, BASE_DEC, VALS(ansi_map_ReleaseReason_vals), 0, + "ansi_map.ReleaseReason", HFILL }}, + { &hf_ansi_map_acgencountered, + { "acgencountered", "ansi_map.acgencountered", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ACGEncountered", HFILL }}, + { &hf_ansi_map_callingPartyName, + { "callingPartyName", "ansi_map.callingPartyName", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CallingPartyName", HFILL }}, + { &hf_ansi_map_callingPartyNumberDigits1, + { "callingPartyNumberDigits1", "ansi_map.callingPartyNumberDigits1", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CallingPartyNumberDigits1", HFILL }}, + { &hf_ansi_map_callingPartyNumberDigits2, + { "callingPartyNumberDigits2", "ansi_map.callingPartyNumberDigits2", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CallingPartyNumberDigits2", HFILL }}, + { &hf_ansi_map_callingPartySubaddress, + { "callingPartySubaddress", "ansi_map.callingPartySubaddress", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CallingPartySubaddress", HFILL }}, + { &hf_ansi_map_conferenceCallingIndicator, + { "conferenceCallingIndicator", "ansi_map.conferenceCallingIndicator", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ConferenceCallingIndicator", HFILL }}, + { &hf_ansi_map_mobileDirectoryNumber, + { "mobileDirectoryNumber", "ansi_map.mobileDirectoryNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.MobileDirectoryNumber", HFILL }}, + { &hf_ansi_map_mSCIdentificationNumber, + { "mSCIdentificationNumber", "ansi_map.mSCIdentificationNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.MSCIdentificationNumber", HFILL }}, + { &hf_ansi_map_oneTimeFeatureIndicator, + { "oneTimeFeatureIndicator", "ansi_map.oneTimeFeatureIndicator", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.OneTimeFeatureIndicator", HFILL }}, + { &hf_ansi_map_featureResult, + { "featureResult", "ansi_map.featureResult", + FT_UINT32, BASE_DEC, VALS(ansi_map_FeatureResult_vals), 0, + "ansi_map.FeatureResult", HFILL }}, + { &hf_ansi_map_accessDeniedReason, + { "accessDeniedReason", "ansi_map.accessDeniedReason", + FT_UINT32, BASE_DEC, VALS(ansi_map_AccessDeniedReason_vals), 0, + "ansi_map.AccessDeniedReason", HFILL }}, + { &hf_ansi_map_actionCode, + { "actionCode", "ansi_map.actionCode", + FT_UINT8, BASE_DEC, VALS(ansi_map_ActionCode_vals), 0, + "ansi_map.ActionCode", HFILL }}, + { &hf_ansi_map_announcementList, + { "announcementList", "ansi_map.announcementList", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.AnnouncementList", HFILL }}, + { &hf_ansi_map_callingPartyNumberString1, + { "callingPartyNumberString1", "ansi_map.callingPartyNumberString1", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CallingPartyNumberString1", HFILL }}, + { &hf_ansi_map_callingPartyNumberString2, + { "callingPartyNumberString2", "ansi_map.callingPartyNumberString2", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CallingPartyNumberString2", HFILL }}, + { &hf_ansi_map_digits_Destination, + { "digits-Destination", "ansi_map.digits_Destination", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.Digits", HFILL }}, + { &hf_ansi_map_displayText, + { "displayText", "ansi_map.displayText", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.DisplayText", HFILL }}, + { &hf_ansi_map_displayText2, + { "displayText2", "ansi_map.displayText2", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.DisplayText2", HFILL }}, + { &hf_ansi_map_dmh_AccountCodeDigits, + { "dmh-AccountCodeDigits", "ansi_map.dmh_AccountCodeDigits", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.DMH_AccountCodeDigits", HFILL }}, + { &hf_ansi_map_dmh_AlternateBillingDigits, + { "dmh-AlternateBillingDigits", "ansi_map.dmh_AlternateBillingDigits", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.DMH_AlternateBillingDigits", HFILL }}, + { &hf_ansi_map_dmh_BillingDigits, + { "dmh-BillingDigits", "ansi_map.dmh_BillingDigits", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.DMH_BillingDigits", HFILL }}, + { &hf_ansi_map_dmh_RedirectionIndicator, + { "dmh-RedirectionIndicator", "ansi_map.dmh_RedirectionIndicator", + FT_UINT32, BASE_DEC, VALS(ansi_map_DMH_RedirectionIndicator_vals), 0, + "ansi_map.DMH_RedirectionIndicator", HFILL }}, + { &hf_ansi_map_groupInformation, + { "groupInformation", "ansi_map.groupInformation", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.GroupInformation", HFILL }}, + { &hf_ansi_map_noAnswerTime, + { "noAnswerTime", "ansi_map.noAnswerTime", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.NoAnswerTime", HFILL }}, + { &hf_ansi_map_pACAIndicator, + { "pACAIndicator", "ansi_map.pACAIndicator", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.PACAIndicator", HFILL }}, + { &hf_ansi_map_pilotNumber, + { "pilotNumber", "ansi_map.pilotNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.PilotNumber", HFILL }}, + { &hf_ansi_map_preferredLanguageIndicator, + { "preferredLanguageIndicator", "ansi_map.preferredLanguageIndicator", + FT_UINT8, BASE_DEC, VALS(ansi_map_PreferredLanguageIndicator_vals), 0, + "ansi_map.PreferredLanguageIndicator", HFILL }}, + { &hf_ansi_map_redirectingNumberDigits, + { "redirectingNumberDigits", "ansi_map.redirectingNumberDigits", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RedirectingNumberDigits", HFILL }}, + { &hf_ansi_map_redirectingNumberString, + { "redirectingNumberString", "ansi_map.redirectingNumberString", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RedirectingNumberString", HFILL }}, + { &hf_ansi_map_redirectingSubaddress, + { "redirectingSubaddress", "ansi_map.redirectingSubaddress", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RedirectingSubaddress", HFILL }}, + { &hf_ansi_map_resumePIC, + { "resumePIC", "ansi_map.resumePIC", + FT_UINT32, BASE_DEC, VALS(ansi_map_ResumePIC_vals), 0, + "ansi_map.ResumePIC", HFILL }}, + { &hf_ansi_map_terminationList, + { "terminationList", "ansi_map.terminationList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.TerminationList", HFILL }}, + { &hf_ansi_map_terminationTriggers, + { "terminationTriggers", "ansi_map.terminationTriggers", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.TerminationTriggers", HFILL }}, + { &hf_ansi_map_triggerAddressList, + { "triggerAddressList", "ansi_map.triggerAddressList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.TriggerAddressList", HFILL }}, + { &hf_ansi_map_targetCellIDList, + { "targetCellIDList", "ansi_map.targetCellIDList", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.TargetCellIDList", HFILL }}, + { &hf_ansi_map_signalQuality, + { "signalQuality", "ansi_map.signalQuality", + FT_UINT32, BASE_DEC, VALS(ansi_map_SignalQuality_vals), 0, + "ansi_map.SignalQuality", HFILL }}, + { &hf_ansi_map_targetMeasurementList, + { "targetMeasurementList", "ansi_map.targetMeasurementList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.TargetMeasurementList", HFILL }}, + { &hf_ansi_map_alertResult, + { "alertResult", "ansi_map.alertResult", + FT_UINT8, BASE_DEC, VALS(ansi_map_AlertResult_result_vals), 0, + "ansi_map.AlertResult", HFILL }}, + { &hf_ansi_map_messageWaitingNotificationCount, + { "messageWaitingNotificationCount", "ansi_map.messageWaitingNotificationCount", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.MessageWaitingNotificationCount", HFILL }}, + { &hf_ansi_map_messageWaitingNotificationType, + { "messageWaitingNotificationType", "ansi_map.messageWaitingNotificationType", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.MessageWaitingNotificationType", HFILL }}, + { &hf_ansi_map_cdmaBandClass, + { "cdmaBandClass", "ansi_map.cdmaBandClass", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMABandClass", HFILL }}, + { &hf_ansi_map_cdmaServiceOption, + { "cdmaServiceOption", "ansi_map.cdmaServiceOption", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAServiceOption", HFILL }}, + { &hf_ansi_map_cdmaSlotCycleIndex, + { "cdmaSlotCycleIndex", "ansi_map.cdmaSlotCycleIndex", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMASlotCycleIndex", HFILL }}, + { &hf_ansi_map_extendedMSCID, + { "extendedMSCID", "ansi_map.extendedMSCID", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ExtendedMSCID", HFILL }}, + { &hf_ansi_map_extendedSystemMyTypeCode, + { "extendedSystemMyTypeCode", "ansi_map.extendedSystemMyTypeCode", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ExtendedSystemMyTypeCode", HFILL }}, + { &hf_ansi_map_imsi, + { "imsi", "ansi_map.imsi", + FT_BYTES, BASE_HEX, NULL, 0, + "gsm_map.IMSI", HFILL }}, + { &hf_ansi_map_legInformation, + { "legInformation", "ansi_map.legInformation", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.LegInformation", HFILL }}, + { &hf_ansi_map_mSIDUsage, + { "mSIDUsage", "ansi_map.mSIDUsage", + FT_UINT8, BASE_DEC, VALS(ansi_MSIDUsage_m_or_i_vals), 0x03, + "ansi_map.MSIDUsage", HFILL }}, + { &hf_ansi_map_networkTMSI, + { "networkTMSI", "ansi_map.networkTMSI", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.NetworkTMSI", HFILL }}, + { &hf_ansi_map_pageCount, + { "pageCount", "ansi_map.pageCount", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.PageCount", HFILL }}, + { &hf_ansi_map_pageIndicator, + { "pageIndicator", "ansi_map.pageIndicator", + FT_UINT8, BASE_DEC, VALS(ansi_map_PageIndicator_vals), 0, + "ansi_map.PageIndicator", HFILL }}, + { &hf_ansi_map_pageResponseTime, + { "pageResponseTime", "ansi_map.pageResponseTime", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.PageResponseTime", HFILL }}, + { &hf_ansi_map_pilotBillingID, + { "pilotBillingID", "ansi_map.pilotBillingID", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.PilotBillingID", HFILL }}, + { &hf_ansi_map_redirectingPartyName, + { "redirectingPartyName", "ansi_map.redirectingPartyName", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RedirectingPartyName", HFILL }}, + { &hf_ansi_map_systemMyTypeCode, + { "systemMyTypeCode", "ansi_map.systemMyTypeCode", + FT_UINT32, BASE_DEC, VALS(ansi_map_SystemMyTypeCode_vals), 0, + "ansi_map.SystemMyTypeCode", HFILL }}, + { &hf_ansi_map_tdmaDataFeaturesIndicator, + { "tdmaDataFeaturesIndicator", "ansi_map.tdmaDataFeaturesIndicator", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.TDMADataFeaturesIndicator", HFILL }}, + { &hf_ansi_map_terminationTreatment, + { "terminationTreatment", "ansi_map.terminationTreatment", + FT_UINT8, BASE_DEC, VALS(ansi_map_TerminationTreatment_vals), 0, + "ansi_map.TerminationTreatment", HFILL }}, + { &hf_ansi_map_conditionallyDeniedReason, + { "conditionallyDeniedReason", "ansi_map.conditionallyDeniedReason", + FT_UINT32, BASE_DEC, VALS(ansi_map_ConditionallyDeniedReason_vals), 0, + "ansi_map.ConditionallyDeniedReason", HFILL }}, + { &hf_ansi_map_pagingFrameClass, + { "pagingFrameClass", "ansi_map.pagingFrameClass", + FT_UINT8, BASE_DEC, VALS(ansi_map_PagingFrameClass_vals), 0x03, + "ansi_map.PagingFrameClass", HFILL }}, + { &hf_ansi_map_pSID_RSIDList, + { "pSID-RSIDList", "ansi_map.pSID_RSIDList", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.PSID_RSIDList", HFILL }}, + { &hf_ansi_map_randc, + { "randc", "ansi_map.randc", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RANDC", HFILL }}, + { &hf_ansi_map_tdmaDataMode, + { "tdmaDataMode", "ansi_map.tdmaDataMode", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.TDMADataMode", HFILL }}, + { &hf_ansi_map_changeServiceAttributes, + { "changeServiceAttributes", "ansi_map.changeServiceAttributes", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ChangeServiceAttributes", HFILL }}, + { &hf_ansi_map_edirectingSubaddress, + { "edirectingSubaddress", "ansi_map.edirectingSubaddress", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RedirectingSubaddress", HFILL }}, + { &hf_ansi_map_setupResult, + { "setupResult", "ansi_map.setupResult", + FT_UINT8, BASE_DEC, VALS(ansi_map_SetupResult_vals), 0, + "ansi_map.SetupResult", HFILL }}, + { &hf_ansi_map_terminationAccessType, + { "terminationAccessType", "ansi_map.terminationAccessType", + FT_UINT8, BASE_DEC, VALS(ansi_map_TerminationAccessType_vals), 0, + "ansi_map.TerminationAccessType", HFILL }}, + { &hf_ansi_map_triggerType, + { "triggerType", "ansi_map.triggerType", + FT_UINT32, BASE_DEC, VALS(ansi_map_TriggerType_vals), 0, + "ansi_map.TriggerType", HFILL }}, + { &hf_ansi_map_winCapability, + { "winCapability", "ansi_map.winCapability", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.WINCapability", HFILL }}, + { &hf_ansi_map_callingPartyCategory, + { "callingPartyCategory", "ansi_map.callingPartyCategory", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CallingPartyCategory", HFILL }}, + { &hf_ansi_map_controlNetworkID, + { "controlNetworkID", "ansi_map.controlNetworkID", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ControlNetworkID", HFILL }}, + { &hf_ansi_map_digits_carrier, + { "digits-carrier", "ansi_map.digits_carrier", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.Digits", HFILL }}, + { &hf_ansi_map_digits_dest, + { "digits-dest", "ansi_map.digits_dest", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.Digits", HFILL }}, + { &hf_ansi_map_dmh_ServiceID, + { "dmh-ServiceID", "ansi_map.dmh_ServiceID", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.DMH_ServiceID", HFILL }}, + { &hf_ansi_map_edirectingNumberDigits, + { "edirectingNumberDigits", "ansi_map.edirectingNumberDigits", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RedirectingNumberDigits", HFILL }}, + { &hf_ansi_map_lectronicSerialNumber, + { "lectronicSerialNumber", "ansi_map.lectronicSerialNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ElectronicSerialNumber", HFILL }}, + { &hf_ansi_map_deregistrationType, + { "deregistrationType", "ansi_map.deregistrationType", + FT_UINT32, BASE_DEC, VALS(ansi_map_DeregistrationType_vals), 0, + "ansi_map.DeregistrationType", HFILL }}, + { &hf_ansi_map_servicesResult, + { "servicesResult", "ansi_map.servicesResult", + FT_UINT8, BASE_DEC, VALS(ansi_map_ServicesResult_ppr_vals), 0x03, + "ansi_map.ServicesResult", HFILL }}, + { &hf_ansi_map_sms_MessageWaitingIndicator, + { "sms-MessageWaitingIndicator", "ansi_map.sms_MessageWaitingIndicator", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.SMS_MessageWaitingIndicator", HFILL }}, + { &hf_ansi_map_originationTriggers, + { "originationTriggers", "ansi_map.originationTriggers", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.OriginationTriggers", HFILL }}, + { &hf_ansi_map_featureIndicator, + { "featureIndicator", "ansi_map.featureIndicator", + FT_UINT32, BASE_DEC, VALS(ansi_map_FeatureIndicator_vals), 0, + "ansi_map.FeatureIndicator", HFILL }}, + { &hf_ansi_map_dmh_ChargeInformation, + { "dmh-ChargeInformation", "ansi_map.dmh_ChargeInformation", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.DMH_ChargeInformation", HFILL }}, + { &hf_ansi_map_qualificationInformationCode, + { "qualificationInformationCode", "ansi_map.qualificationInformationCode", + FT_UINT32, BASE_DEC, VALS(ansi_map_QualificationInformationCode_vals), 0, + "ansi_map.QualificationInformationCode", HFILL }}, + { &hf_ansi_map_authorizationDenied, + { "authorizationDenied", "ansi_map.authorizationDenied", + FT_UINT32, BASE_DEC, VALS(ansi_map_AuthorizationDenied_vals), 0, + "ansi_map.AuthorizationDenied", HFILL }}, + { &hf_ansi_map_authorizationPeriod, + { "authorizationPeriod", "ansi_map.authorizationPeriod", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.AuthorizationPeriod", HFILL }}, + { &hf_ansi_map_deniedAuthorizationPeriod, + { "deniedAuthorizationPeriod", "ansi_map.deniedAuthorizationPeriod", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.DeniedAuthorizationPeriod", HFILL }}, + { &hf_ansi_map_randValidTime, + { "randValidTime", "ansi_map.randValidTime", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RANDValidTime", HFILL }}, + { &hf_ansi_map_redirectionReason, + { "redirectionReason", "ansi_map.redirectionReason", + FT_UINT32, BASE_DEC, VALS(ansi_map_RedirectionReason_vals), 0, + "ansi_map.RedirectionReason", HFILL }}, + { &hf_ansi_map_cancellationType, + { "cancellationType", "ansi_map.cancellationType", + FT_UINT8, BASE_DEC, VALS(ansi_map_CancellationType_vals), 0, + "ansi_map.CancellationType", HFILL }}, + { &hf_ansi_map_controlChannelData, + { "controlChannelData", "ansi_map.controlChannelData", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ControlChannelData", HFILL }}, + { &hf_ansi_map_receivedSignalQuality, + { "receivedSignalQuality", "ansi_map.receivedSignalQuality", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.ReceivedSignalQuality", HFILL }}, + { &hf_ansi_map_systemAccessData, + { "systemAccessData", "ansi_map.systemAccessData", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SystemAccessData", HFILL }}, + { &hf_ansi_map_cancellationDenied, + { "cancellationDenied", "ansi_map.cancellationDenied", + FT_UINT32, BASE_DEC, VALS(ansi_map_CancellationDenied_vals), 0, + "ansi_map.CancellationDenied", HFILL }}, + { &hf_ansi_map_availabilityType, + { "availabilityType", "ansi_map.availabilityType", + FT_UINT8, BASE_DEC, VALS(ansi_map_AvailabilityType_vals), 0, + "ansi_map.AvailabilityType", HFILL }}, + { &hf_ansi_map_borderCellAccess, + { "borderCellAccess", "ansi_map.borderCellAccess", + FT_UINT32, BASE_DEC, VALS(ansi_map_BorderCellAccess_vals), 0, + "ansi_map.BorderCellAccess", HFILL }}, + { &hf_ansi_map_msc_Address, + { "msc-Address", "ansi_map.msc_Address", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.MSC_Address", HFILL }}, + { &hf_ansi_map_sms_Address, + { "sms-Address", "ansi_map.sms_Address", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SMS_Address", HFILL }}, + { &hf_ansi_map_digits_Carrier, + { "digits-Carrier", "ansi_map.digits_Carrier", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.Digits", HFILL }}, + { &hf_ansi_map_authenticationCapability, + { "authenticationCapability", "ansi_map.authenticationCapability", + FT_UINT8, BASE_DEC, VALS(ansi_map_AuthenticationCapability_vals), 0, + "ansi_map.AuthenticationCapability", HFILL }}, + { &hf_ansi_map_callingFeaturesIndicator, + { "callingFeaturesIndicator", "ansi_map.callingFeaturesIndicator", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CallingFeaturesIndicator", HFILL }}, + { &hf_ansi_map_geographicAuthorization, + { "geographicAuthorization", "ansi_map.geographicAuthorization", + FT_UINT8, BASE_DEC, VALS(ansi_map_GeographicAuthorization_vals), 0, + "ansi_map.GeographicAuthorization", HFILL }}, + { &hf_ansi_map_originationIndicator, + { "originationIndicator", "ansi_map.originationIndicator", + FT_UINT32, BASE_DEC, VALS(ansi_map_OriginationIndicator_vals), 0, + "ansi_map.OriginationIndicator", HFILL }}, + { &hf_ansi_map_restrictionDigits, + { "restrictionDigits", "ansi_map.restrictionDigits", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RestrictionDigits", HFILL }}, + { &hf_ansi_map_sms_OriginationRestrictions, + { "sms-OriginationRestrictions", "ansi_map.sms_OriginationRestrictions", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SMS_OriginationRestrictions", HFILL }}, + { &hf_ansi_map_sms_TerminationRestrictions, + { "sms-TerminationRestrictions", "ansi_map.sms_TerminationRestrictions", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SMS_TerminationRestrictions", HFILL }}, + { &hf_ansi_map_spinipin, + { "spinipin", "ansi_map.spinipin", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SPINIPIN", HFILL }}, + { &hf_ansi_map_spiniTriggers, + { "spiniTriggers", "ansi_map.spiniTriggers", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SPINITriggers", HFILL }}, + { &hf_ansi_map_terminationRestrictionCode, + { "terminationRestrictionCode", "ansi_map.terminationRestrictionCode", + FT_UINT32, BASE_DEC, VALS(ansi_map_TerminationRestrictionCode_vals), 0, + "ansi_map.TerminationRestrictionCode", HFILL }}, + { &hf_ansi_map_digitCollectionControl, + { "digitCollectionControl", "ansi_map.digitCollectionControl", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.DigitCollectionControl", HFILL }}, + { &hf_ansi_map_trunkStatus, + { "trunkStatus", "ansi_map.trunkStatus", + FT_UINT32, BASE_DEC, VALS(ansi_map_TrunkStatus_vals), 0, + "ansi_map.TrunkStatus", HFILL }}, + { &hf_ansi_map_userGroup, + { "userGroup", "ansi_map.userGroup", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.UserGroup", HFILL }}, + { &hf_ansi_map_voiceMailboxNumber, + { "voiceMailboxNumber", "ansi_map.voiceMailboxNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.VoiceMailboxNumber", HFILL }}, + { &hf_ansi_map_voiceMailboxPIN, + { "voiceMailboxPIN", "ansi_map.voiceMailboxPIN", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.VoiceMailboxPIN", HFILL }}, + { &hf_ansi_map_sms_BearerData, + { "sms-BearerData", "ansi_map.sms_BearerData", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SMS_BearerData", HFILL }}, + { &hf_ansi_map_sms_TeleserviceIdentifier, + { "sms-TeleserviceIdentifier", "ansi_map.sms_TeleserviceIdentifier", + FT_UINT16, BASE_DEC, VALS(ansi_map_SMS_TeleserviceIdentifier_vals), 0, + "ansi_map.SMS_TeleserviceIdentifier", HFILL }}, + { &hf_ansi_map_sms_ChargeIndicator, + { "sms-ChargeIndicator", "ansi_map.sms_ChargeIndicator", + FT_UINT8, BASE_DEC, VALS(ansi_map_SMS_ChargeIndicator_vals), 0, + "ansi_map.SMS_ChargeIndicator", HFILL }}, + { &hf_ansi_map_sms_DestinationAddress, + { "sms-DestinationAddress", "ansi_map.sms_DestinationAddress", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SMS_DestinationAddress", HFILL }}, + { &hf_ansi_map_sms_OriginalDestinationAddress, + { "sms-OriginalDestinationAddress", "ansi_map.sms_OriginalDestinationAddress", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SMS_OriginalDestinationAddress", HFILL }}, + { &hf_ansi_map_sms_OriginalDestinationSubaddress, + { "sms-OriginalDestinationSubaddress", "ansi_map.sms_OriginalDestinationSubaddress", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SMS_OriginalDestinationSubaddress", HFILL }}, + { &hf_ansi_map_sms_OriginalOriginatingAddress, + { "sms-OriginalOriginatingAddress", "ansi_map.sms_OriginalOriginatingAddress", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SMS_OriginalOriginatingAddress", HFILL }}, + { &hf_ansi_map_sms_OriginalOriginatingSubaddress, + { "sms-OriginalOriginatingSubaddress", "ansi_map.sms_OriginalOriginatingSubaddress", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SMS_OriginalOriginatingSubaddress", HFILL }}, + { &hf_ansi_map_sms_OriginatingAddress, + { "sms-OriginatingAddress", "ansi_map.sms_OriginatingAddress", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SMS_OriginatingAddress", HFILL }}, + { &hf_ansi_map_sms_CauseCode, + { "sms-CauseCode", "ansi_map.sms_CauseCode", + FT_UINT8, BASE_DEC, VALS(ansi_map_SMS_CauseCode_vals), 0, + "ansi_map.SMS_CauseCode", HFILL }}, + { &hf_ansi_map_interMessageTime, + { "interMessageTime", "ansi_map.interMessageTime", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.InterMessageTime", HFILL }}, + { &hf_ansi_map_newlyAssignedMIN, + { "newlyAssignedMIN", "ansi_map.newlyAssignedMIN", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.NewlyAssignedMIN", HFILL }}, + { &hf_ansi_map_newlyAssignedIMSI, + { "newlyAssignedIMSI", "ansi_map.newlyAssignedIMSI", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.NewlyAssignedIMSI", HFILL }}, + { &hf_ansi_map_newMINExtension, + { "newMINExtension", "ansi_map.newMINExtension", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.NewMINExtension", HFILL }}, + { &hf_ansi_map_sms_MessageCount, + { "sms-MessageCount", "ansi_map.sms_MessageCount", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SMS_MessageCount", HFILL }}, + { &hf_ansi_map_sms_NotificationIndicator, + { "sms-NotificationIndicator", "ansi_map.sms_NotificationIndicator", + FT_UINT8, BASE_DEC, VALS(ansi_map_SMS_NotificationIndicator_vals), 0, + "ansi_map.SMS_NotificationIndicator", HFILL }}, + { &hf_ansi_map_temporaryReferenceNumber, + { "temporaryReferenceNumber", "ansi_map.temporaryReferenceNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.TemporaryReferenceNumber", HFILL }}, + { &hf_ansi_map_mobileStationMSID, + { "mobileStationMSID", "ansi_map.mobileStationMSID", + FT_UINT32, BASE_DEC, VALS(ansi_map_MobileStationMSID_vals), 0, + "ansi_map.MobileStationMSID", HFILL }}, + { &hf_ansi_map_sms_AccessDeniedReason, + { "sms-AccessDeniedReason", "ansi_map.sms_AccessDeniedReason", + FT_UINT8, BASE_DEC, VALS(ansi_map_SMS_AccessDeniedReason_vals), 0, + "ansi_map.SMS_AccessDeniedReason", HFILL }}, + { &hf_ansi_map_seizureType, + { "seizureType", "ansi_map.seizureType", + FT_UINT32, BASE_DEC, VALS(ansi_map_SeizureType_vals), 0, + "ansi_map.SeizureType", HFILL }}, + { &hf_ansi_map_requiredParametersMask, + { "requiredParametersMask", "ansi_map.requiredParametersMask", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RequiredParametersMask", HFILL }}, + { &hf_ansi_map_reasonList, + { "reasonList", "ansi_map.reasonList", + FT_UINT32, BASE_DEC, VALS(ansi_map_ReasonList_vals), 0, + "ansi_map.ReasonList", HFILL }}, + { &hf_ansi_map_networkTMSIExpirationTime, + { "networkTMSIExpirationTime", "ansi_map.networkTMSIExpirationTime", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.NetworkTMSIExpirationTime", HFILL }}, + { &hf_ansi_map_newNetworkTMSI, + { "newNetworkTMSI", "ansi_map.newNetworkTMSI", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.NewNetworkTMSI", HFILL }}, + { &hf_ansi_map_serviceID, + { "serviceID", "ansi_map.serviceID", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ServiceID", HFILL }}, + { &hf_ansi_map_dataAccessElementList, + { "dataAccessElementList", "ansi_map.dataAccessElementList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.DataAccessElementList", HFILL }}, + { &hf_ansi_map_timeDateOffset, + { "timeDateOffset", "ansi_map.timeDateOffset", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.TimeDateOffset", HFILL }}, + { &hf_ansi_map_timeOfDay, + { "timeOfDay", "ansi_map.timeOfDay", + FT_INT32, BASE_DEC, NULL, 0, + "ansi_map.TimeOfDay", HFILL }}, + { &hf_ansi_map_dmd_BillingIndicator, + { "dmd-BillingIndicator", "ansi_map.dmd_BillingIndicator", + FT_UINT32, BASE_DEC, VALS(ansi_map_DMH_BillingIndicator_vals), 0, + "ansi_map.DMH_BillingIndicator", HFILL }}, + { &hf_ansi_map_failureType, + { "failureType", "ansi_map.failureType", + FT_UINT32, BASE_DEC, VALS(ansi_map_FailureType_vals), 0, + "ansi_map.FailureType", HFILL }}, + { &hf_ansi_map_failureCause, + { "failureCause", "ansi_map.failureCause", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.FailureCause", HFILL }}, + { &hf_ansi_map_outingDigits, + { "outingDigits", "ansi_map.outingDigits", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.RoutingDigits", HFILL }}, + { &hf_ansi_map_databaseKey, + { "databaseKey", "ansi_map.databaseKey", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.DatabaseKey", HFILL }}, + { &hf_ansi_map_modificationRequestList, + { "modificationRequestList", "ansi_map.modificationRequestList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.ModificationRequestList", HFILL }}, + { &hf_ansi_map_modificationResultList, + { "modificationResultList", "ansi_map.modificationResultList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.ModificationResultList", HFILL }}, + { &hf_ansi_map_serviceDataAccessElementList, + { "serviceDataAccessElementList", "ansi_map.serviceDataAccessElementList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.ServiceDataAccessElementList", HFILL }}, + { &hf_ansi_map_privateSpecializedResource, + { "privateSpecializedResource", "ansi_map.privateSpecializedResource", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.PrivateSpecializedResource", HFILL }}, + { &hf_ansi_map_specializedResource, + { "specializedResource", "ansi_map.specializedResource", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.SpecializedResource", HFILL }}, + { &hf_ansi_map_executeScript, + { "executeScript", "ansi_map.executeScript", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.ExecuteScript", HFILL }}, + { &hf_ansi_map_scriptResult, + { "scriptResult", "ansi_map.scriptResult", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ScriptResult", HFILL }}, + { &hf_ansi_map_tdmaVoiceMode, + { "tdmaVoiceMode", "ansi_map.tdmaVoiceMode", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.TDMAVoiceMode", HFILL }}, + { &hf_ansi_map_callStatus, + { "callStatus", "ansi_map.callStatus", + FT_UINT32, BASE_DEC, VALS(ansi_map_CallStatus_vals), 0, + "ansi_map.CallStatus", HFILL }}, + { &hf_ansi_map_releaseCause, + { "releaseCause", "ansi_map.releaseCause", + FT_UINT32, BASE_DEC, VALS(ansi_map_ReleaseCause_vals), 0, + "ansi_map.ReleaseCause", HFILL }}, + { &hf_ansi_map_callRecoveryIDList, + { "callRecoveryIDList", "ansi_map.callRecoveryIDList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.CallRecoveryIDList", HFILL }}, + { &hf_ansi_map_positionInformationCode, + { "positionInformationCode", "ansi_map.positionInformationCode", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.PositionInformationCode", HFILL }}, + { &hf_ansi_map_mSStatus, + { "mSStatus", "ansi_map.mSStatus", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.MSStatus", HFILL }}, + { &hf_ansi_map_pSID_RSIDInformation, + { "pSID-RSIDInformation", "ansi_map.pSID_RSIDInformation", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.PSID_RSIDInformation", HFILL }}, + { &hf_ansi_map_controlType, + { "controlType", "ansi_map.controlType", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ControlType", HFILL }}, + { &hf_ansi_map_destinationAddress, + { "destinationAddress", "ansi_map.destinationAddress", + FT_UINT32, BASE_DEC, VALS(ansi_map_DestinationAddress_vals), 0, + "ansi_map.DestinationAddress", HFILL }}, + { &hf_ansi_map_gapDuration, + { "gapDuration", "ansi_map.gapDuration", + FT_UINT32, BASE_DEC, VALS(ansi_map_GapDuration_vals), 0, + "ansi_map.GapDuration", HFILL }}, + { &hf_ansi_map_gapInterval, + { "gapInterval", "ansi_map.gapInterval", + FT_UINT32, BASE_DEC, VALS(ansi_map_GapInterval_vals), 0, + "ansi_map.GapInterval", HFILL }}, + { &hf_ansi_map_invokingNEType, + { "invokingNEType", "ansi_map.invokingNEType", + FT_INT32, BASE_DEC, NULL, 0, + "ansi_map.InvokingNEType", HFILL }}, + { &hf_ansi_map_range, + { "range", "ansi_map.range", + FT_INT32, BASE_DEC, NULL, 0, + "ansi_map.Range", HFILL }}, + { &hf_ansi_map_ctionCode, + { "ctionCode", "ansi_map.ctionCode", + FT_UINT8, BASE_DEC, VALS(ansi_map_ActionCode_vals), 0, + "ansi_map.ActionCode", HFILL }}, + { &hf_ansi_map_aKeyProtocolVersion, + { "aKeyProtocolVersion", "ansi_map.aKeyProtocolVersion", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.AKeyProtocolVersion", HFILL }}, + { &hf_ansi_map_mobileStationPartialKey, + { "mobileStationPartialKey", "ansi_map.mobileStationPartialKey", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.MobileStationPartialKey", HFILL }}, + { &hf_ansi_map_newlyAssignedMSID, + { "newlyAssignedMSID", "ansi_map.newlyAssignedMSID", + FT_UINT32, BASE_DEC, VALS(ansi_map_NewlyAssignedMSID_vals), 0, + "ansi_map.NewlyAssignedMSID", HFILL }}, + { &hf_ansi_map_baseStationPartialKey, + { "baseStationPartialKey", "ansi_map.baseStationPartialKey", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.BaseStationPartialKey", HFILL }}, + { &hf_ansi_map_modulusValue, + { "modulusValue", "ansi_map.modulusValue", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ModulusValue", HFILL }}, + { &hf_ansi_map_otasp_ResultCode, + { "otasp-ResultCode", "ansi_map.otasp_ResultCode", + FT_UINT8, BASE_DEC, VALS(ansi_map_OTASP_ResultCode_vals), 0, + "ansi_map.OTASP_ResultCode", HFILL }}, + { &hf_ansi_map_primitiveValue, + { "primitiveValue", "ansi_map.primitiveValue", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.PrimitiveValue", HFILL }}, + { &hf_ansi_map_announcementCode1, + { "announcementCode1", "ansi_map.announcementCode1", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.AnnouncementCode", HFILL }}, + { &hf_ansi_map_announcementCode2, + { "announcementCode2", "ansi_map.announcementCode2", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.AnnouncementCode", HFILL }}, + { &hf_ansi_map_cdmaCodeChannel, + { "cdmaCodeChannel", "ansi_map.cdmaCodeChannel", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMACodeChannel", HFILL }}, + { &hf_ansi_map_cdmaPilotPN, + { "cdmaPilotPN", "ansi_map.cdmaPilotPN", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAPilotPN", HFILL }}, + { &hf_ansi_map_cdmaPowerCombinedIndicator, + { "cdmaPowerCombinedIndicator", "ansi_map.cdmaPowerCombinedIndicator", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAPowerCombinedIndicator", HFILL }}, + { &hf_ansi_map_CDMACodeChannelList_item, + { "Item", "ansi_map.CDMACodeChannelList_item", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.CDMACodeChannelInformation", HFILL }}, + { &hf_ansi_map_cdmaPilotStrength, + { "cdmaPilotStrength", "ansi_map.cdmaPilotStrength", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAPilotStrength", HFILL }}, + { &hf_ansi_map_cdmaTargetOneWayDelay, + { "cdmaTargetOneWayDelay", "ansi_map.cdmaTargetOneWayDelay", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMATargetOneWayDelay", HFILL }}, + { &hf_ansi_map_CDMATargetMAHOList_item, + { "Item", "ansi_map.CDMATargetMAHOList_item", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.CDMATargetMAHOInformation", HFILL }}, + { &hf_ansi_map_cdmaSignalQuality, + { "cdmaSignalQuality", "ansi_map.cdmaSignalQuality", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMASignalQuality", HFILL }}, + { &hf_ansi_map_CDMATargetMeasurementList_item, + { "Item", "ansi_map.CDMATargetMeasurementList_item", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.CDMATargetMeasurementInformation", HFILL }}, + { &hf_ansi_map_TargetMeasurementList_item, + { "Item", "ansi_map.TargetMeasurementList_item", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.TargetMeasurementInformation", HFILL }}, + { &hf_ansi_map_TerminationList_item, + { "Item", "ansi_map.TerminationList_item", + FT_UINT32, BASE_DEC, VALS(ansi_map_TerminationList_item_vals), 0, + "ansi_map.TerminationList_item", HFILL }}, + { &hf_ansi_map_intersystemTermination, + { "intersystemTermination", "ansi_map.intersystemTermination", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.IntersystemTermination", HFILL }}, + { &hf_ansi_map_localTermination, + { "localTermination", "ansi_map.localTermination", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.LocalTermination", HFILL }}, + { &hf_ansi_map_pstnTermination, + { "pstnTermination", "ansi_map.pstnTermination", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.PSTNTermination", HFILL }}, + { &hf_ansi_map_CDMAServiceOptionList_item, + { "Item", "ansi_map.CDMAServiceOptionList_item", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.CDMAServiceOptionList_item", HFILL }}, + { &hf_ansi_map_cdmaServiceOption2, + { "cdmaServiceOption2", "ansi_map.cdmaServiceOption2", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAServiceOption", HFILL }}, + { &hf_ansi_map_pSID_RSIDInformation1, + { "pSID-RSIDInformation1", "ansi_map.pSID_RSIDInformation1", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.PSID_RSIDInformation", HFILL }}, + { &hf_ansi_map_targetCellID1, + { "targetCellID1", "ansi_map.targetCellID1", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.TargetCellID", HFILL }}, + { &hf_ansi_map_cdmaConnectionReference, + { "cdmaConnectionReference", "ansi_map.cdmaConnectionReference", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAConnectionReference", HFILL }}, + { &hf_ansi_map_cdmaState, + { "cdmaState", "ansi_map.cdmaState", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAState", HFILL }}, + { &hf_ansi_map_cdmaServiceOptionConnectionIdentifier, + { "cdmaServiceOptionConnectionIdentifier", "ansi_map.cdmaServiceOptionConnectionIdentifier", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAServiceOptionConnectionIdentifier", HFILL }}, + { &hf_ansi_map_CDMAConnectionReferenceList_item, + { "Item", "ansi_map.CDMAConnectionReferenceList_item", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.CDMAConnectionReferenceList_item", HFILL }}, + { &hf_ansi_map_cdmaConnectionReferenceInformation, + { "cdmaConnectionReferenceInformation", "ansi_map.cdmaConnectionReferenceInformation", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.CDMAConnectionReferenceInformation", HFILL }}, + { &hf_ansi_map_cdmaConnectionReferenceInformation2, + { "cdmaConnectionReferenceInformation2", "ansi_map.cdmaConnectionReferenceInformation2", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.CDMAConnectionReferenceInformation", HFILL }}, + { &hf_ansi_map_analogRedirectInfo, + { "analogRedirectInfo", "ansi_map.analogRedirectInfo", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.AnalogRedirectInfo", HFILL }}, + { &hf_ansi_map_CDMAChannelNumberList_item, + { "Item", "ansi_map.CDMAChannelNumberList_item", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.CDMAChannelNumberList_item", HFILL }}, + { &hf_ansi_map_cdmaChannelNumber, + { "cdmaChannelNumber", "ansi_map.cdmaChannelNumber", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAChannelNumber", HFILL }}, + { &hf_ansi_map_cdmaChannelNumber2, + { "cdmaChannelNumber2", "ansi_map.cdmaChannelNumber2", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.CDMAChannelNumber", HFILL }}, + { &hf_ansi_map_cdmaChannelNumberList, + { "cdmaChannelNumberList", "ansi_map.cdmaChannelNumberList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.CDMAChannelNumberList", HFILL }}, + { &hf_ansi_map_dataID, + { "dataID", "ansi_map.dataID", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.DataID", HFILL }}, + { &hf_ansi_map_change, + { "change", "ansi_map.change", + FT_UINT32, BASE_DEC, VALS(ansi_map_Change_vals), 0, + "ansi_map.Change", HFILL }}, + { &hf_ansi_map_dataValue, + { "dataValue", "ansi_map.dataValue", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.DataValue", HFILL }}, + { &hf_ansi_map_DataAccessElementList_item, + { "Item", "ansi_map.DataAccessElementList_item", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.DataAccessElementList_item", HFILL }}, + { &hf_ansi_map_dataAccessElement1, + { "dataAccessElement1", "ansi_map.dataAccessElement1", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.DataAccessElement", HFILL }}, + { &hf_ansi_map_dataAccessElement2, + { "dataAccessElement2", "ansi_map.dataAccessElement2", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.DataAccessElement", HFILL }}, + { &hf_ansi_map_dataResult, + { "dataResult", "ansi_map.dataResult", + FT_UINT32, BASE_DEC, VALS(ansi_map_DataResult_vals), 0, + "ansi_map.DataResult", HFILL }}, + { &hf_ansi_map_DataUpdateResultList_item, + { "Item", "ansi_map.DataUpdateResultList_item", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.DataUpdateResult", HFILL }}, + { &hf_ansi_map_globalTitle, + { "globalTitle", "ansi_map.globalTitle", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.GlobalTitle", HFILL }}, + { &hf_ansi_map_pC_SSN, + { "pC-SSN", "ansi_map.pC_SSN", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.PC_SSN", HFILL }}, + { &hf_ansi_map_scriptName, + { "scriptName", "ansi_map.scriptName", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ScriptName", HFILL }}, + { &hf_ansi_map_scriptArgument, + { "scriptArgument", "ansi_map.scriptArgument", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.ScriptArgument", HFILL }}, + { &hf_ansi_map_allOrNone, + { "allOrNone", "ansi_map.allOrNone", + FT_UINT32, BASE_DEC, VALS(ansi_map_AllOrNone_vals), 0, + "ansi_map.AllOrNone", HFILL }}, + { &hf_ansi_map_ModificationRequestList_item, + { "Item", "ansi_map.ModificationRequestList_item", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.ModificationRequest", HFILL }}, + { &hf_ansi_map_serviceDataResultList, + { "serviceDataResultList", "ansi_map.serviceDataResultList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.ServiceDataResultList", HFILL }}, + { &hf_ansi_map_ModificationResultList_item, + { "Item", "ansi_map.ModificationResultList_item", + FT_UINT32, BASE_DEC, VALS(ansi_map_ModificationResult_vals), 0, + "ansi_map.ModificationResult", HFILL }}, + { &hf_ansi_map_ServiceDataAccessElementList_item, + { "Item", "ansi_map.ServiceDataAccessElementList_item", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.ServiceDataAccessElement", HFILL }}, + { &hf_ansi_map_dataUpdateResultList, + { "dataUpdateResultList", "ansi_map.dataUpdateResultList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.DataUpdateResultList", HFILL }}, + { &hf_ansi_map_ServiceDataResultList_item, + { "Item", "ansi_map.ServiceDataResultList_item", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.ServiceDataResult", HFILL }}, + { &hf_ansi_map_TriggerAddressList_item, + { "Item", "ansi_map.TriggerAddressList_item", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.TriggerAddressList_item", HFILL }}, + { &hf_ansi_map_triggerList, + { "triggerList", "ansi_map.triggerList", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.TriggerList", HFILL }}, + { &hf_ansi_map_triggerListOpt, + { "triggerListOpt", "ansi_map.triggerListOpt", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.TriggerList", HFILL }}, + { &hf_ansi_map_wIN_TriggerList, + { "wIN-TriggerList", "ansi_map.wIN_TriggerList", + FT_UINT32, BASE_DEC, NULL, 0, + "ansi_map.WIN_TriggerList", HFILL }}, + { &hf_ansi_map_triggerCapability, + { "triggerCapability", "ansi_map.triggerCapability", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.TriggerCapability", HFILL }}, + { &hf_ansi_map_wINOperationsCapability, + { "wINOperationsCapability", "ansi_map.wINOperationsCapability", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.WINOperationsCapability", HFILL }}, + { &hf_ansi_map_detectionPointType, + { "detectionPointType", "ansi_map.detectionPointType", + FT_UINT32, BASE_DEC, VALS(ansi_map_DetectionPointType_vals), 0, + "ansi_map.DetectionPointType", HFILL }}, + { &hf_ansi_map_WIN_TriggerList_item, + { "Item", "ansi_map.WIN_TriggerList_item", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.WIN_Trigger", HFILL }}, + { &hf_ansi_map_CallRecoveryIDList_item, + { "Item", "ansi_map.CallRecoveryIDList_item", + FT_NONE, BASE_NONE, NULL, 0, + "ansi_map.CallRecoveryID", HFILL }}, + { &hf_ansi_map_sCFOverloadGapInterval, + { "sCFOverloadGapInterval", "ansi_map.sCFOverloadGapInterval", + FT_UINT32, BASE_DEC, VALS(ansi_map_SCFOverloadGapInterval_vals), 0, + "ansi_map.SCFOverloadGapInterval", HFILL }}, + { &hf_ansi_map_serviceManagementSystemGapInterval, + { "serviceManagementSystemGapInterval", "ansi_map.serviceManagementSystemGapInterval", + FT_UINT32, BASE_DEC, VALS(ansi_map_ServiceManagementSystemGapInterval_vals), 0, + "ansi_map.ServiceManagementSystemGapInterval", HFILL }}, + { &hf_ansi_map_mobileStationIMSI, + { "mobileStationIMSI", "ansi_map.mobileStationIMSI", + FT_BYTES, BASE_HEX, NULL, 0, + "ansi_map.MobileStationIMSI", HFILL }}, + +/*--- End of included file: packet-ansi_map-hfarr.c ---*/ +#line 4505 "packet-ansi_map-template.c" + }; + + /* List of subtrees */ + static gint *ett[] = { + &ett_ansi_map, + &ett_mintype, + &ett_digitstype, + &ett_billingid, + &ett_mscid, + &ett_originationtriggers, + &ett_transactioncapability, + &ett_systemcapabilities, + +/*--- Included file: packet-ansi_map-ettarr.c ---*/ +#line 1 "packet-ansi_map-ettarr.c" + &ett_ansi_map_ComponentPDU, + &ett_ansi_map_InvokePDU, + &ett_ansi_map_ReturnResultPDU, + &ett_ansi_map_ReturnErrorPDU, + &ett_ansi_map_RejectPDU, + &ett_ansi_map_OperationCode, + &ett_ansi_map_ErrorCode, + &ett_ansi_map_AuthenticationDirective, + &ett_ansi_map_AuthenticationDirectiveRes, + &ett_ansi_map_AuthenticationDirectiveForward, + &ett_ansi_map_AuthenticationDirectiveForwardRes, + &ett_ansi_map_AuthenticationFailureReport, + &ett_ansi_map_AuthenticationFailureReportRes, + &ett_ansi_map_AuthenticationRequest, + &ett_ansi_map_AuthenticationRequestRes, + &ett_ansi_map_AuthenticationStatusReport, + &ett_ansi_map_AuthenticationStatusReportRes, + &ett_ansi_map_BaseStationChallenge, + &ett_ansi_map_BaseStationChallengeRes, + &ett_ansi_map_Blocking, + &ett_ansi_map_BulkDeregistration, + &ett_ansi_map_CountRequest, + &ett_ansi_map_CountRequestRes, + &ett_ansi_map_FacilitiesDirective, + &ett_ansi_map_FacilitiesDirectiveRes, + &ett_ansi_map_FacilitiesDirective2, + &ett_ansi_map_FacilitiesDirective2Res, + &ett_ansi_map_FacilitiesRelease, + &ett_ansi_map_FacilitiesReleaseRes, + &ett_ansi_map_FeatureRequest, + &ett_ansi_map_FeatureRequestRes, + &ett_ansi_map_FlashRequest, + &ett_ansi_map_HandoffBack, + &ett_ansi_map_HandoffBackRes, + &ett_ansi_map_HandoffBack2, + &ett_ansi_map_HandoffBack2Res, + &ett_ansi_map_HandoffMeasurementRequest, + &ett_ansi_map_HandoffMeasurementRequestRes, + &ett_ansi_map_HandoffMeasurementRequest2, + &ett_ansi_map_HandoffMeasurementRequest2Res, + &ett_ansi_map_HandoffToThird, + &ett_ansi_map_HandoffToThirdRes, + &ett_ansi_map_HandoffToThird2, + &ett_ansi_map_HandoffToThird2Res, + &ett_ansi_map_InformationDirective, + &ett_ansi_map_InformationDirectiveRes, + &ett_ansi_map_InformationForward, + &ett_ansi_map_InformationForwardRes, + &ett_ansi_map_InterSystemAnswer, + &ett_ansi_map_InterSystemPage, + &ett_ansi_map_InterSystemPageRes, + &ett_ansi_map_InterSystemPage2, + &ett_ansi_map_InterSystemPage2Res, + &ett_ansi_map_InterSystemSetup, + &ett_ansi_map_InterSystemSetupRes, + &ett_ansi_map_LocationRequest, + &ett_ansi_map_LocationRequestRes, + &ett_ansi_map_MSInactive, + &ett_ansi_map_OriginationRequest, + &ett_ansi_map_OriginationRequestRes, + &ett_ansi_map_QualificationDirective, + &ett_ansi_map_QualificationRequest, + &ett_ansi_map_QualificationRequestRes, + &ett_ansi_map_RandomVariableRequest, + &ett_ansi_map_RandomVariableRequestRes, + &ett_ansi_map_RedirectionDirective, + &ett_ansi_map_RedirectionRequest, + &ett_ansi_map_RegistrationCancellation, + &ett_ansi_map_RegistrationCancellationRes, + &ett_ansi_map_RegistrationNotification, + &ett_ansi_map_RegistrationNotificationRes, + &ett_ansi_map_RemoteUserInteractionDirective, + &ett_ansi_map_RemoteUserInteractionDirectiveRes, + &ett_ansi_map_ResetCircuit, + &ett_ansi_map_ResetCircuitRes, + &ett_ansi_map_RoutingRequest, + &ett_ansi_map_RoutingRequestRes, + &ett_ansi_map_SMSDeliveryBackward, + &ett_ansi_map_SMSDeliveryBackwardRes, + &ett_ansi_map_SMSDeliveryForward, + &ett_ansi_map_SMSDeliveryForwardRes, + &ett_ansi_map_SMSDeliveryPointToPoint, + &ett_ansi_map_SMSDeliveryPointToPointRes, + &ett_ansi_map_SMSNotification, + &ett_ansi_map_SMSNotificationRes, + &ett_ansi_map_SMSRequest, + &ett_ansi_map_SMSRequestRes, + &ett_ansi_map_TransferToNumberRequest, + &ett_ansi_map_TransferToNumberRequestRes, + &ett_ansi_map_TrunkTest, + &ett_ansi_map_TrunkTestDisconnect, + &ett_ansi_map_Unblocking, + &ett_ansi_map_UnreliableRoamerDataDirective, + &ett_ansi_map_UnsolicitedResponse, + &ett_ansi_map_UnsolicitedResponseRes, + &ett_ansi_map_ParameterRequest, + &ett_ansi_map_ParameterRequestRes, + &ett_ansi_map_TMSIDirective, + &ett_ansi_map_TMSIDirectiveRes, + &ett_ansi_map_NumberPortabilityRequest, + &ett_ansi_map_ServiceRequest, + &ett_ansi_map_ServiceRequestRes, + &ett_ansi_map_AnalyzedInformation, + &ett_ansi_map_AnalyzedInformationRes, + &ett_ansi_map_ConnectionFailureReport, + &ett_ansi_map_ConnectResource, + &ett_ansi_map_FacilitySelectedAndAvailable, + &ett_ansi_map_FacilitySelectedAndAvailableRes, + &ett_ansi_map_Modify, + &ett_ansi_map_ModifyRes, + &ett_ansi_map_Search, + &ett_ansi_map_SearchRes, + &ett_ansi_map_SeizeResource, + &ett_ansi_map_SeizeResourceRes, + &ett_ansi_map_SRFDirective, + &ett_ansi_map_SRFDirectiveRes, + &ett_ansi_map_TBusy, + &ett_ansi_map_TBusyRes, + &ett_ansi_map_TNoAnswer, + &ett_ansi_map_TNoAnswerRes, + &ett_ansi_map_ChangeFacilities, + &ett_ansi_map_ChangeFacilitiesRes, + &ett_ansi_map_ChangeService, + &ett_ansi_map_ChangeServiceRes, + &ett_ansi_map_MessageDirective, + &ett_ansi_map_BulkDisconnection, + &ett_ansi_map_CallControlDirective, + &ett_ansi_map_CallControlDirectiveRes, + &ett_ansi_map_OAnswer, + &ett_ansi_map_ODisconnect, + &ett_ansi_map_ODisconnectRes, + &ett_ansi_map_CallRecoveryReport, + &ett_ansi_map_TAnswer, + &ett_ansi_map_TDisconnect, + &ett_ansi_map_TDisconnectRes, + &ett_ansi_map_UnreliableCallData, + &ett_ansi_map_OCalledPartyBusy, + &ett_ansi_map_OCalledPartyBusyRes, + &ett_ansi_map_ONoAnswer, + &ett_ansi_map_ONoAnswerRes, + &ett_ansi_map_PositionRequest, + &ett_ansi_map_PositionRequestRes, + &ett_ansi_map_PositionRequestForward, + &ett_ansi_map_PositionRequestForwardRes, + &ett_ansi_map_ACGDirective, + &ett_ansi_map_RoamerDatabaseVerificationRequest, + &ett_ansi_map_RoamerDatabaseVerificationRequestRes, + &ett_ansi_map_AddService, + &ett_ansi_map_AddServiceRes, + &ett_ansi_map_DropService, + &ett_ansi_map_DropServiceRes, + &ett_ansi_map_OTASPRequest, + &ett_ansi_map_OTASPRequestRes, + &ett_ansi_map_AnnouncementList, + &ett_ansi_map_CDMACodeChannelInformation, + &ett_ansi_map_CDMACodeChannelList, + &ett_ansi_map_CDMATargetMAHOInformation, + &ett_ansi_map_CDMATargetMAHOList, + &ett_ansi_map_CDMATargetMeasurementInformation, + &ett_ansi_map_CDMATargetMeasurementList, + &ett_ansi_map_IntersystemTermination, + &ett_ansi_map_LocalTermination, + &ett_ansi_map_Profile, + &ett_ansi_map_PSTNTermination, + &ett_ansi_map_TargetMeasurementInformation, + &ett_ansi_map_TargetMeasurementList, + &ett_ansi_map_TerminationList, + &ett_ansi_map_TerminationList_item, + &ett_ansi_map_CDMAServiceOptionList, + &ett_ansi_map_CDMAServiceOptionList_item, + &ett_ansi_map_PSID_RSIDList, + &ett_ansi_map_TargetCellIDList, + &ett_ansi_map_CDMAConnectionReferenceInformation, + &ett_ansi_map_CDMAConnectionReferenceList, + &ett_ansi_map_CDMAConnectionReferenceList_item, + &ett_ansi_map_AnalogRedirectRecord, + &ett_ansi_map_CDMAChannelNumberList, + &ett_ansi_map_CDMAChannelNumberList_item, + &ett_ansi_map_CDMARedirectRecord, + &ett_ansi_map_MSID, + &ett_ansi_map_DataAccessElement, + &ett_ansi_map_DataAccessElementList, + &ett_ansi_map_DataAccessElementList_item, + &ett_ansi_map_DataUpdateResult, + &ett_ansi_map_DataUpdateResultList, + &ett_ansi_map_DestinationAddress, + &ett_ansi_map_ExecuteScript, + &ett_ansi_map_ModificationRequest, + &ett_ansi_map_ModificationRequestList, + &ett_ansi_map_ModificationResult, + &ett_ansi_map_ModificationResultList, + &ett_ansi_map_ServiceDataAccessElement, + &ett_ansi_map_ServiceDataAccessElementList, + &ett_ansi_map_ServiceDataResult, + &ett_ansi_map_ServiceDataResultList, + &ett_ansi_map_SRFCapability, + &ett_ansi_map_TriggerAddressList, + &ett_ansi_map_TriggerAddressList_item, + &ett_ansi_map_TriggerList, + &ett_ansi_map_WINCapability, + &ett_ansi_map_WIN_Trigger, + &ett_ansi_map_WIN_TriggerList, + &ett_ansi_map_CallRecoveryID, + &ett_ansi_map_CallRecoveryIDList, + &ett_ansi_map_GapInterval, + &ett_ansi_map_MobileStationMSID, + &ett_ansi_map_NewlyAssignedMSID, + +/*--- End of included file: packet-ansi_map-ettarr.c ---*/ +#line 4518 "packet-ansi_map-template.c" + }; + + + /* Register protocol */ + proto_ansi_map = proto_register_protocol(PNAME, PSNAME, PFNAME); + /* Register fields and subtrees */ + proto_register_field_array(proto_ansi_map, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + + + register_dissector("ansi_map", dissect_ansi_map, proto_ansi_map); + + is637_tele_id_dissector_table = + register_dissector_table("ansi_map.tele_id", "IS-637 Teleservice ID", FT_UINT8, BASE_DEC); - is683_dissector_table = + is683_dissector_table = register_dissector_table("ansi_map.ota", "IS-683-A (OTA)", FT_UINT8, BASE_DEC); - is801_dissector_table = + is801_dissector_table = register_dissector_table("ansi_map.pld", "IS-801 (PLD)", FT_UINT8, BASE_DEC); - /* Required function calls to register the header fields and subtrees used */ - proto_register_field_array(proto_ansi_map, hf, array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); + ansi_map_tap = register_tap("ansi_map"); - ansi_map_tap = register_tap("ansi_map"); - range_convert_str(&global_ssn_range, "5-14", MAX_SSN); - ssn_range = range_empty(); + range_convert_str(&global_ssn_range, "5-14", MAX_SSN); + ssn_range = range_empty(); - ansi_map_module = prefs_register_protocol(proto_ansi_map, proto_reg_handoff_ansi_map); + ansi_map_module = prefs_register_protocol(proto_ansi_map, proto_reg_handoff_ansi_map); + - prefs_register_range_preference(ansi_map_module, "map.ssn", "GSM MAP SSNs", - "GSM MAP SSNs to decode as ANSI MAP", + prefs_register_range_preference(ansi_map_module, "map.ssn", "ANSI MAP SSNs", + "ANSI MAP SSNs to decode as ANSI MAP", &global_ssn_range, MAX_SSN); + + register_init_routine(&ansi_map_init_protocol); } + + diff --git a/epan/dissectors/packet-ansi_map.h b/epan/dissectors/packet-ansi_map.h index 65bce5c8e1..ed290d3936 100644 --- a/epan/dissectors/packet-ansi_map.h +++ b/epan/dissectors/packet-ansi_map.h @@ -1,10 +1,17 @@ +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Wireshark dissector compiler */ +/* .\packet-ansi_map.h */ +/* ../../tools/asn2wrs.py -b -e -p ansi_map -c ansi_map.cnf -s packet-ansi_map-template ansi_map.asn */ + +/* Input file: packet-ansi_map-template.h */ + +#line 1 "packet-ansi_map-template.h" /* packet-ansi_map.h + * Routines for ansi_map packet dissection + * Copyright 2005, Anders Broman <anders.broman@ericsson.com> * * $Id$ * - * Copyright 2003, Michael Lum <mlum [AT] telostech.com>, - * In association with Telos Technology Inc. - * * Wireshark - Network traffic analyzer * By Gerald Combs <gerald@wireshark.org> * Copyright 1998 Gerald Combs @@ -21,9 +28,12 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#ifndef PACKET_ANSI_MAP_H +#define PACKET_ANSI_MAP_H + #define ANSI_MAP_MAX_NUM_MESSAGE_TYPES 256 typedef struct _ansi_map_tap_rec_t { @@ -39,3 +49,10 @@ typedef struct _ansi_map_tap_rec_t { */ WS_VAR_IMPORT const value_string ansi_map_opr_code_strings[]; + + +/*#include "packet-ansi_map-exp.h" */ + +#endif /* PACKET_ansi_map_H */ + + |