Use value_string_ext fcns to access several value_string arrays;
[obnox/wireshark/wip.git] / asn1 / ansi_map / packet-ansi_map-template.c
1 /* packet-ansi_map.c
2  * Routines for ANSI 41 Mobile Application Part (IS41 MAP) dissection
3  * Specications from 3GPP2 (www.3gpp2.org)
4  * Based on the dissector by :
5  * Michael Lum <mlum [AT] telostech.com>
6  * In association with Telos Technology Inc.
7  *
8  * Copyright 2005 - 2009, Anders Broman <anders.broman@ericsson.com>
9  *
10  * $Id$
11  *
12  * Wireshark - Network traffic analyzer
13  * By Gerald Combs <gerald@wireshark.org>
14  * Copyright 1998 Gerald Combs
15  *
16  * This program is free software; you can redistribute it and/or
17  * modify it under the terms of the GNU General Public License
18  * as published by the Free Software Foundation; either version 2
19  * of the License, or (at your option) any later version.
20  *
21  * This program is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24  * GNU General Public License for more details.
25  *
26  * You should have received a copy of the GNU General Public License
27  * along with this program; if not, write to the Free Software
28  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
29  *
30  * Credit to Tomas Kukosa for developing the asn2wrs compiler.
31  *
32  * Title                3GPP2                   Other
33  *
34  *   Cellular Radiotelecommunications Intersystem Operations
35  *                      3GPP2 N.S0005-0 v 1.0           ANSI/TIA/EIA-41-D
36  *
37  *   Network Support for MDN-Based Message Centers
38  *                      3GPP2 N.S0024-0 v1.0    IS-841
39  *
40  *   Enhanced International Calling
41  *                      3GPP2 N.S0027           IS-875
42  *
43  *   ANSI-41-D Miscellaneous Enhancements Revision 0
44  *                      3GPP2 N.S0015           PN-3590 (ANSI-41-E)
45  *
46  *   Authentication Enhancements
47  *                      3GPP2 N.S0014-0 v1.0    IS-778
48  *
49  *   Features In CDMA
50  *                      3GPP2 N.S0010-0 v1.0    IS-735
51  *
52  *   OTASP and OTAPA
53  *                      3GPP2 N.S0011-0 v1.0    IS-725-A
54  *
55  *   Circuit Mode Services
56  *                      3GPP2 N.S0008-0 v1.0    IS-737
57  *      XXX SecondInterMSCCircuitID not implemented, parameter ID conflicts with ISLP Information!
58  *
59  *   IMSI
60  *                      3GPP2 N.S0009-0 v1.0    IS-751
61  *
62  *   WIN Phase 1
63  *                      3GPP2 N.S0013-0 v1.0    IS-771
64  *
65  *       DCCH (Clarification of Audit Order with Forced
66  *         Re-Registration in pre-TIA/EIA-136-A Implementation
67  *                      3GPP2 A.S0017-B                 IS-730
68  *
69  *   UIM
70  *                      3GPP2 N.S0003
71  *
72  *   WIN Phase 2
73  *                      3GPP2 N.S0004-0 v1.0    IS-848
74  *
75  *   TIA/EIA-41-D Pre-Paid Charging
76  *                      3GPP2 N.S0018-0 v1.0    IS-826
77  *
78  *   User Selective Call Forwarding
79  *                      3GPP2 N.S0021-0 v1.0    IS-838
80  *
81  *
82  *   Answer Hold
83  *                      3GPP2 N.S0022-0 v1.0    IS-837
84  *
85  */
86
87 #ifdef HAVE_CONFIG_H
88 # include "config.h"
89 #endif
90
91 #include <glib.h>
92 #include <epan/packet.h>
93 #include <epan/prefs.h>
94 #include <epan/tap.h>
95 #include <epan/asn1.h>
96
97 #include "packet-ber.h"
98 #include "packet-ansi_map.h"
99 #include "packet-ansi_a.h"
100 #include "packet-gsm_map.h"
101 #include "packet-tcap.h"
102 #include "packet-ansi_tcap.h"
103
104 #define PNAME  "ANSI Mobile Application Part"
105 #define PSNAME "ANSI MAP"
106 #define PFNAME "ansi_map"
107
108 /* Preference settings default */
109 #define MAX_SSN 254
110 static range_t *global_ssn_range;
111
112 static dissector_handle_t ansi_map_handle=NULL;
113
114 /* Initialize the protocol and registered fields */
115 static int ansi_map_tap = -1;
116 static int proto_ansi_map = -1;
117
118 static int hf_ansi_map_op_code_fam = -1;
119 static int hf_ansi_map_op_code = -1;
120
121 static int hf_ansi_map_reservedBitH = -1;
122 static int hf_ansi_map_reservedBitHG = -1;
123 static int hf_ansi_map_reservedBitHGFE = -1;
124 static int hf_ansi_map_reservedBitFED = -1;
125 static int hf_ansi_map_reservedBitD = -1;
126 static int hf_ansi_map_reservedBitED = -1;
127
128 static int hf_ansi_map_type_of_digits = -1;
129 static int hf_ansi_map_na = -1;
130 static int hf_ansi_map_pi = -1;
131 static int hf_ansi_map_navail = -1;
132 static int hf_ansi_map_si = -1;
133 static int hf_ansi_map_digits_enc = -1;
134 static int hf_ansi_map_np = -1;
135 static int hf_ansi_map_nr_digits = -1;
136 static int hf_ansi_map_bcd_digits = -1;
137 static int hf_ansi_map_ia5_digits = -1;
138 static int hf_ansi_map_subaddr_type = -1;
139 static int hf_ansi_map_subaddr_odd_even = -1;
140 static int hf_ansi_alertcode_cadence = -1;
141 static int hf_ansi_alertcode_pitch = -1;
142 static int hf_ansi_alertcode_alertaction = -1;
143 static int hf_ansi_map_announcementcode_tone = -1;
144 static int hf_ansi_map_announcementcode_class = -1;
145 static int hf_ansi_map_announcementcode_std_ann = -1;
146 static int hf_ansi_map_announcementcode_cust_ann = -1;
147 static int hf_ansi_map_authorizationperiod_period = -1;
148 static int hf_ansi_map_value = -1;
149 static int hf_ansi_map_msc_type = -1;
150 static int hf_ansi_map_handoffstate_pi = -1;
151 static int hf_ansi_map_tgn = -1;
152 static int hf_ansi_map_tmn = -1;
153 static int hf_ansi_map_messagewaitingnotificationcount_tom = -1;
154 static int hf_ansi_map_messagewaitingnotificationcount_no_mw = -1;
155 static int hf_ansi_map_messagewaitingnotificationtype_mwi = -1;
156 static int hf_ansi_map_messagewaitingnotificationtype_apt = -1;
157 static int hf_ansi_map_messagewaitingnotificationtype_pt = -1;
158
159 static int hf_ansi_map_trans_cap_prof = -1;
160 static int hf_ansi_map_trans_cap_busy = -1;
161 static int hf_ansi_map_trans_cap_ann = -1;
162 static int hf_ansi_map_trans_cap_rui = -1;
163 static int hf_ansi_map_trans_cap_spini = -1;
164 static int hf_ansi_map_trans_cap_uzci = -1;
165 static int hf_ansi_map_trans_cap_ndss = -1;
166 static int hf_ansi_map_trans_cap_nami = -1;
167 static int hf_ansi_trans_cap_multerm = -1;
168 static int hf_ansi_map_terminationtriggers_busy = -1;
169 static int hf_ansi_map_terminationtriggers_rf = -1;
170 static int hf_ansi_map_terminationtriggers_npr = -1;
171 static int hf_ansi_map_terminationtriggers_na = -1;
172 static int hf_ansi_map_terminationtriggers_nr = -1;
173 static int hf_ansi_trans_cap_tl = -1;
174 static int hf_ansi_map_cdmaserviceoption = -1;
175 static int hf_ansi_trans_cap_waddr = -1;
176 static int hf_ansi_map_MarketID = -1;
177 static int hf_ansi_map_swno = -1;
178 static int hf_ansi_map_idno = -1;
179 static int hf_ansi_map_segcount = -1;
180 static int hf_ansi_map_sms_originationrestrictions_fmc = -1;
181 static int hf_ansi_map_sms_originationrestrictions_direct = -1;
182 static int hf_ansi_map_sms_originationrestrictions_default = -1;
183 static int hf_ansi_map_systemcapabilities_auth = -1;
184 static int hf_ansi_map_systemcapabilities_se = -1;
185 static int hf_ansi_map_systemcapabilities_vp = -1;
186 static int hf_ansi_map_systemcapabilities_cave = -1;
187 static int hf_ansi_map_systemcapabilities_ssd = -1;
188 static int hf_ansi_map_systemcapabilities_dp = -1;
189
190 static int hf_ansi_map_mslocation_lat = -1;
191 static int hf_ansi_map_mslocation_long = -1;
192 static int hf_ansi_map_mslocation_res = -1;
193 static int hf_ansi_map_nampscallmode_namps = -1;
194 static int hf_ansi_map_nampscallmode_amps = -1;
195 static int hf_ansi_map_nampschanneldata_navca = -1;
196 static int hf_ansi_map_nampschanneldata_CCIndicator = -1;
197
198 static int hf_ansi_map_callingfeaturesindicator_cfufa = -1;
199 static int hf_ansi_map_callingfeaturesindicator_cfbfa = -1;
200 static int hf_ansi_map_callingfeaturesindicator_cfnafa = -1;
201 static int hf_ansi_map_callingfeaturesindicator_cwfa = -1;
202 static int hf_ansi_map_callingfeaturesindicator_3wcfa = -1;
203 static int hf_ansi_map_callingfeaturesindicator_pcwfa =-1;
204 static int hf_ansi_map_callingfeaturesindicator_dpfa = -1;
205 static int hf_ansi_map_callingfeaturesindicator_ahfa = -1;
206 static int hf_ansi_map_callingfeaturesindicator_uscfvmfa = -1;
207 static int hf_ansi_map_callingfeaturesindicator_uscfmsfa = -1;
208 static int hf_ansi_map_callingfeaturesindicator_uscfnrfa = -1;
209 static int hf_ansi_map_callingfeaturesindicator_cpdsfa = -1;
210 static int hf_ansi_map_callingfeaturesindicator_ccsfa = -1;
211 static int hf_ansi_map_callingfeaturesindicator_epefa = -1;
212 static int hf_ansi_map_callingfeaturesindicator_cdfa = -1;
213 static int hf_ansi_map_callingfeaturesindicator_vpfa = -1;
214 static int hf_ansi_map_callingfeaturesindicator_ctfa = -1;
215 static int hf_ansi_map_callingfeaturesindicator_cnip1fa = -1;
216 static int hf_ansi_map_callingfeaturesindicator_cnip2fa = -1;
217 static int hf_ansi_map_callingfeaturesindicator_cnirfa = -1;
218 static int hf_ansi_map_callingfeaturesindicator_cniroverfa = -1;
219 static int hf_ansi_map_cdmacallmode_cdma = -1;
220 static int hf_ansi_map_cdmacallmode_amps = -1;
221 static int hf_ansi_map_cdmacallmode_namps = -1;
222 static int hf_ansi_map_cdmacallmode_cls1 = -1;
223 static int hf_ansi_map_cdmacallmode_cls2 = -1;
224 static int hf_ansi_map_cdmacallmode_cls3 = -1;
225 static int hf_ansi_map_cdmacallmode_cls4 = -1;
226 static int hf_ansi_map_cdmacallmode_cls5 = -1;
227 static int hf_ansi_map_cdmacallmode_cls6 = -1;
228 static int hf_ansi_map_cdmacallmode_cls7 = -1;
229 static int hf_ansi_map_cdmacallmode_cls8 = -1;
230 static int hf_ansi_map_cdmacallmode_cls9 = -1;
231 static int hf_ansi_map_cdmacallmode_cls10 = -1;
232 static int hf_ansi_map_cdmachanneldata_Frame_Offset = -1;
233 static int hf_ansi_map_cdmachanneldata_CDMA_ch_no = -1;
234 static int hf_ansi_map_cdmachanneldata_band_cls = -1;
235 static int hf_ansi_map_cdmachanneldata_lc_mask_b6 = -1;
236 static int hf_ansi_map_cdmachanneldata_lc_mask_b5 = -1;
237 static int hf_ansi_map_cdmachanneldata_lc_mask_b4 = -1;
238 static int hf_ansi_map_cdmachanneldata_lc_mask_b3 = -1;
239 static int hf_ansi_map_cdmachanneldata_lc_mask_b2 = -1;
240 static int hf_ansi_map_cdmachanneldata_lc_mask_b1 = -1;
241 static int hf_ansi_map_cdmachanneldata_np_ext = -1;
242 static int hf_ansi_map_cdmachanneldata_nominal_pwr = -1;
243 static int hf_ansi_map_cdmachanneldata_nr_preamble = -1;
244
245 static int hf_ansi_map_cdmastationclassmark_pc = -1;
246 static int hf_ansi_map_cdmastationclassmark_dtx = -1;
247 static int hf_ansi_map_cdmastationclassmark_smi = -1;
248 static int hf_ansi_map_cdmastationclassmark_dmi = -1;
249 static int hf_ansi_map_channeldata_vmac = -1;
250 static int hf_ansi_map_channeldata_dtx = -1;
251 static int hf_ansi_map_channeldata_scc = -1;
252 static int hf_ansi_map_channeldata_chno = -1;
253 static int hf_ansi_map_ConfidentialityModes_vp = -1;
254 static int hf_ansi_map_controlchanneldata_dcc = -1;
255 static int hf_ansi_map_controlchanneldata_cmac = -1;
256 static int hf_ansi_map_controlchanneldata_chno = -1;
257 static int hf_ansi_map_controlchanneldata_sdcc1 = -1;
258 static int hf_ansi_map_controlchanneldata_sdcc2 = -1;
259 static int hf_ansi_map_ConfidentialityModes_se = -1;
260 static int hf_ansi_map_deniedauthorizationperiod_period = -1;
261 static int hf_ansi_map_ConfidentialityModes_dp = -1;
262
263 static int hf_ansi_map_originationtriggers_all = -1;
264 static int hf_ansi_map_originationtriggers_local = -1;
265 static int hf_ansi_map_originationtriggers_ilata = -1;
266 static int hf_ansi_map_originationtriggers_olata = -1;
267 static int hf_ansi_map_originationtriggers_int = -1;
268 static int hf_ansi_map_originationtriggers_wz = -1;
269 static int hf_ansi_map_originationtriggers_unrec = -1;
270 static int hf_ansi_map_originationtriggers_rvtc = -1;
271 static int hf_ansi_map_originationtriggers_star = -1;
272 static int hf_ansi_map_originationtriggers_ds = -1;
273 static int hf_ansi_map_originationtriggers_pound = -1;
274 static int hf_ansi_map_originationtriggers_dp = -1;
275 static int hf_ansi_map_originationtriggers_pa = -1;
276 static int hf_ansi_map_originationtriggers_nodig = -1;
277 static int hf_ansi_map_originationtriggers_onedig = -1;
278 static int hf_ansi_map_originationtriggers_twodig = -1;
279 static int hf_ansi_map_originationtriggers_threedig = -1;
280 static int hf_ansi_map_originationtriggers_fourdig = -1;
281 static int hf_ansi_map_originationtriggers_fivedig = -1;
282 static int hf_ansi_map_originationtriggers_sixdig = -1;
283 static int hf_ansi_map_originationtriggers_sevendig = -1;
284 static int hf_ansi_map_originationtriggers_eightdig = -1;
285 static int hf_ansi_map_originationtriggers_ninedig = -1;
286 static int hf_ansi_map_originationtriggers_tendig = -1;
287 static int hf_ansi_map_originationtriggers_elevendig = -1;
288 static int hf_ansi_map_originationtriggers_twelvedig = -1;
289 static int hf_ansi_map_originationtriggers_thirteendig = -1;
290 static int hf_ansi_map_originationtriggers_fourteendig = -1;
291 static int hf_ansi_map_originationtriggers_fifteendig = -1;
292 static int hf_ansi_map_triggercapability_init = -1;
293 static int hf_ansi_map_triggercapability_kdigit = -1;
294 static int hf_ansi_map_triggercapability_all = -1;
295 static int hf_ansi_map_triggercapability_rvtc = -1;
296 static int hf_ansi_map_triggercapability_oaa = -1;
297 static int hf_ansi_map_triggercapability_oans = -1;
298 static int hf_ansi_map_triggercapability_odisc = -1;
299 static int hf_ansi_map_triggercapability_ona = -1;
300 static int hf_ansi_map_triggercapability_ct = -1;
301 static int hf_ansi_map_triggercapability_unrec =-1;
302 static int hf_ansi_map_triggercapability_pa = -1;
303 static int hf_ansi_map_triggercapability_at = -1;
304 static int hf_ansi_map_triggercapability_cgraa = -1;
305 static int hf_ansi_map_triggercapability_it = -1;
306 static int hf_ansi_map_triggercapability_cdraa = -1;
307 static int hf_ansi_map_triggercapability_obsy = -1;
308 static int hf_ansi_map_triggercapability_tra = -1;
309 static int hf_ansi_map_triggercapability_tbusy = -1;
310 static int hf_ansi_map_triggercapability_tna = -1;
311 static int hf_ansi_map_triggercapability_tans = -1;
312 static int hf_ansi_map_triggercapability_tdisc = -1;
313 static int hf_ansi_map_winoperationscapability_conn = -1;
314 static int hf_ansi_map_winoperationscapability_ccdir = -1;
315 static int hf_ansi_map_winoperationscapability_pos = -1;
316 static int hf_ansi_map_PACA_Level = -1;
317 static int hf_ansi_map_pacaindicator_pa = -1;
318
319 #include "packet-ansi_map-hf.c"
320
321 /* Initialize the subtree pointers */
322 static gint ett_ansi_map = -1;
323 static gint ett_mintype = -1;
324 static gint ett_digitstype = -1;
325 static gint ett_billingid = -1;
326 static gint ett_sms_bearer_data = -1;
327 static gint ett_sms_teleserviceIdentifier = -1;
328 static gint ett_extendedmscid = -1;
329 static gint ett_extendedsystemmytypecode = -1;
330 static gint ett_handoffstate = -1;
331 static gint ett_mscid = -1;
332 static gint ett_cdmachanneldata = -1;
333 static gint ett_cdmastationclassmark = -1;
334 static gint ett_channeldata = -1;
335 static gint ett_confidentialitymodes = -1;
336 static gint ett_controlchanneldata = -1;
337 static gint ett_CDMA2000HandoffInvokeIOSData = -1;
338 static gint ett_CDMA2000HandoffResponseIOSData = -1;
339 static gint ett_originationtriggers = -1;
340 static gint ett_pacaindicator = -1;
341 static gint ett_callingpartyname = -1;
342 static gint ett_triggercapability = -1;
343 static gint ett_winoperationscapability = -1;
344 static gint ett_win_trigger_list = -1;
345 static gint ett_controlnetworkid = -1;
346 static gint ett_transactioncapability = -1;
347 static gint ett_cdmaserviceoption = -1;
348 static gint ett_systemcapabilities = -1;
349 static gint ett_sms_originationrestrictions = -1;
350
351 #include "packet-ansi_map-ett.c"
352
353 /* Global variables */
354 static dissector_table_t is637_tele_id_dissector_table; /* IS-637 Teleservice ID */
355 static dissector_table_t is683_dissector_table; /* IS-683-A (OTA) */
356 static dissector_table_t is801_dissector_table; /* IS-801 (PLD) */
357 static packet_info *g_pinfo;
358 static proto_tree *g_tree;
359 tvbuff_t *SMS_BearerData_tvb = NULL;
360 gint32    ansi_map_sms_tele_id = -1;
361 static gboolean is683_ota;
362 static gboolean is801_pld;
363 static gboolean ansi_map_is_invoke;
364 static guint32 OperationCode;
365 static guint8 ServiceIndicator;
366
367
368 struct ansi_map_invokedata_t {
369     guint32 opcode;
370     guint8 ServiceIndicator;
371 };
372
373 static void dissect_ansi_map_win_trigger_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_);
374
375
376 /* Transaction table */
377 static GHashTable *TransactionId_table=NULL;
378
379 static void
380 TransactionId_table_cleanup(gpointer key , gpointer value, gpointer user_data _U_){
381
382     struct ansi_map_invokedata_t *ansi_map_saved_invokedata = value;
383     gchar *TransactionId_str = key;
384
385     g_free(TransactionId_str);
386     g_free(ansi_map_saved_invokedata);
387
388 }
389
390 static void
391 ansi_map_init_transaction_table(void){
392
393     /* Destroy any existing memory chunks / hashes. */
394     if (TransactionId_table){
395         g_hash_table_foreach(TransactionId_table, TransactionId_table_cleanup, NULL);
396         g_hash_table_destroy(TransactionId_table);
397     }
398
399     TransactionId_table = g_hash_table_new(g_str_hash, g_str_equal);
400
401 }
402
403 static void
404 ansi_map_init_protocol(void)
405 {
406     ansi_map_init_transaction_table();
407 }
408
409 /* Store Invoke information needed for the corresponding reply */
410 static void
411 update_saved_invokedata(packet_info *pinfo, proto_tree *tree _U_, tvbuff_t *tvb _U_){
412     struct ansi_map_invokedata_t *ansi_map_saved_invokedata;
413     struct ansi_tcap_private_t *p_private_tcap;
414     address* src = &(pinfo->src);
415     address* dst = &(pinfo->dst);
416     guint8 *src_str;
417     guint8 *dst_str;
418     char *buf;
419
420     buf=ep_alloc(1024);
421
422     src_str = ep_address_to_str(src);
423     dst_str = ep_address_to_str(dst);
424
425     /* Data from the TCAP dissector */
426     if (pinfo->private_data != NULL){
427         p_private_tcap=pinfo->private_data;
428         if ((!pinfo->fd->flags.visited)&&(p_private_tcap->TransactionID_str)){
429             /* Only do this once XXX I hope its the right thing to do */
430             /* The hash string needs to contain src and dest to distiguish differnt flows */
431             g_snprintf(buf,1024,"%s%s%s",p_private_tcap->TransactionID_str,src_str,dst_str);
432             /* If the entry allready exists don't owervrite it */
433             ansi_map_saved_invokedata = g_hash_table_lookup(TransactionId_table,buf);
434             if(ansi_map_saved_invokedata)
435                 return;
436
437             ansi_map_saved_invokedata = g_malloc(sizeof(struct ansi_map_invokedata_t));
438             ansi_map_saved_invokedata->opcode = p_private_tcap->d.OperationCode_private;
439             ansi_map_saved_invokedata->ServiceIndicator = ServiceIndicator;
440
441             g_hash_table_insert(TransactionId_table,
442                                 g_strdup(buf),
443                                 ansi_map_saved_invokedata);
444             /*
445               g_warning("Invoke Hash string %s",buf);
446             */
447         }
448     }
449
450 }
451 /* value strings */
452 const value_string ansi_map_opr_code_strings[] = {
453     {   1, "Handoff Measurement Request" },
454     {   2, "Facilities Directive" },
455     {   3, "Mobile On Channel" },
456     {   4, "Handoff Back" },
457     {   5, "Facilities Release" },
458     {   6, "Qualification Request" },
459     {   7, "Qualification Directive" },
460     {   8, "Blocking" },
461     {   9, "Unblocking" },
462     {  10,  "Reset Circuit" },
463     {  11, "Trunk Test" },
464     {  12, "Trunk Test Disconnect" },
465     {  13, "Registration Notification" },
466     {  14, "Registration Cancellation" },
467     {  15, "Location Request" },
468     {  16, "Routing Request" },
469     {  17, "Feature Request" },
470     {  18, "Reserved 18 (Service Profile Request, IS-41-C)" },
471     {  19, "Reserved 19 (Service Profile Directive, IS-41-C)" },
472     {  20, "Unreliable Roamer Data Directive" },
473     {  21, "Reserved 21 (Call Data Request, IS-41-C)" },
474     {  22, "MS Inactive" },
475     {  23, "Transfer To Number Request" },
476     {  24, "Redirection Request" },
477     {  25, "Handoff To Third" },
478     {  26, "Flash Request" },
479     {  27, "Authentication Directive" },
480     {  28, "Authentication Request" },
481     {  29, "Base Station Challenge" },
482     {  30, "Authentication Failure Report" },
483     {  31, "Count Request" },
484     {  32, "Inter System Page" },
485     {  33, "Unsolicited Response" },
486     {  34, "Bulk Deregistration" },
487     {  35, "Handoff Measurement Request 2" },
488     {  36, "Facilities Directive 2" },
489     {  37, "Handoff Back 2" },
490     {  38, "Handoff To Third 2" },
491     {  39, "Authentication Directive Forward" },
492     {  40, "Authentication Status Report" },
493     {  41, "Reserved 41" },
494     {  42, "Information Directive" },
495     {  43, "Information Forward" },
496     {  44, "Inter System Answer" },
497     {  45, "Inter System Page 2" },
498     {  46, "Inter System Setup" },
499     {  47, "Origination Request" },
500     {  48, "Random Variable Request" },
501     {  49, "Redirection Directive" },
502     {  50, "Remote User Interaction Directive" },
503     {  51, "SMS Delivery Backward" },
504     {  52, "SMS Delivery Forward" },
505     {  53, "SMS Delivery Point to Point" },
506     {  54, "SMS Notification" },
507     {  55, "SMS Request" },
508     {  56, "OTASP Request" },
509     {  57, "Information Backward" },
510     {  58, "Change Facilities" },
511     {  59, "Change Service" },
512     {  60, "Parameter Request" },
513     {  61, "TMSI Directive" },
514     {  62, "NumberPortabilityRequest" },
515     {  63, "Service Request" },
516     {  64, "Analyzed Information Request" },
517     {  65, "Connection Failure Report" },
518     {  66, "Connect Resource" },
519     {  67, "Disconnect Resource" },
520     {  68, "Facility Selected and Available" },
521     {  69, "Instruction Request" },
522     {  70, "Modify" },
523     {  71, "Reset Timer" },
524     {  72, "Search" },
525     {  73, "Seize Resource" },
526     {  74, "SRF Directive" },
527     {  75, "T Busy" },
528     {  76, "T NoAnswer" },
529     {  77, "Release" },
530     {  78, "SMS Delivery Point to Point Ack" },
531     {  79, "Message Directive" },
532     {  80, "Bulk Disconnection" },
533     {  81, "Call Control Directive" },
534     {  82, "O Answer" },
535     {  83, "O Disconnect" },
536     {  84, "Call Recovery Report" },
537     {  85, "T Answer" },
538     {  86, "T Disconnect" },
539     {  87, "Unreliable Call Data" },
540     {  88, "O CalledPartyBusy" },
541     {  89, "O NoAnswer" },
542     {  90, "Position Request" },
543     {  91, "Position Request Forward" },
544     {  92, "Call Termination Report" },
545     {  93, "Geo Position Directive" },
546     {  94, "Geo Position Request" },
547     {  95, "Inter System Position Request" },
548     {  96, "Inter System Position Request Forward" },
549     {  97, "ACG Directive" },
550     {  98, "Roamer Database Verification Request" },
551     {  99, "Add Service" },
552     { 100, "Drop Service" },
553     { 101, "InterSystemSMSPage" },
554     { 102, "LCSParameterRequest" },
555     { 103, "Unknown ANSI-MAP PDU" },
556     { 104, "Unknown ANSI-MAP PDU" },
557     { 105, "Unknown ANSI-MAP PDU" },
558     { 106, "PositionEventNotification" },
559     { 107, "Unknown ANSI-MAP PDU" },
560     { 108, "Unknown ANSI-MAP PDU" },
561     { 109, "Unknown ANSI-MAP PDU" },
562     { 110, "Unknown ANSI-MAP PDU" },
563     { 111, "InterSystemSMSDelivery-PointToPoint" },
564     { 112, "QualificationRequest2" },
565     {   0, NULL },
566 };
567 static value_string_ext ansi_map_opr_code_strings_ext = VALUE_STRING_EXT_INIT(ansi_map_opr_code_strings);
568
569 static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx);
570 static int dissect_returnData(proto_tree *tree, tvbuff_t *tvb, int offset,  asn1_ctx_t *actx);
571 static int dissect_ansi_map_SystemMyTypeCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index _U_);
572
573 typedef struct dgt_set_t
574 {
575     unsigned char out[15];
576 }
577 dgt_set_t;
578
579 static dgt_set_t Dgt_tbcd = {
580     {
581   /*  0   1   2   3   4   5   6   7   8   9   a   b   c   d   e */
582      '0','1','2','3','4','5','6','7','8','9','?','B','C','*','#'
583     }
584 };
585 static dgt_set_t Dgt1_9_bcd = {
586     {
587   /*  0   1   2   3   4   5   6   7   8   9   a   b   c   d   e */
588      '0','1','2','3','4','5','6','7','8','9','?','?','?','?','?'
589     }
590 };
591 /* Assumes the rest of the tvb contains the digits to be turned into a string
592  */
593 static const char*
594 unpack_digits2(tvbuff_t *tvb, int offset,dgt_set_t *dgt){
595
596     int length;
597     guint8 octet;
598     int i=0;
599     char *digit_str;
600
601     length = tvb_length(tvb);
602     if (length < offset)
603         return "";
604     digit_str = ep_alloc((length - offset)*2+1);
605
606     while ( offset < length ){
607
608         octet = tvb_get_guint8(tvb,offset);
609         digit_str[i] = dgt->out[octet & 0x0f];
610         i++;
611
612         /*
613          * unpack second value in byte
614          */
615         octet = octet >> 4;
616
617         if (octet == 0x0f)      /* odd number bytes - hit filler */
618             break;
619
620         digit_str[i] = dgt->out[octet & 0x0f];
621         i++;
622         offset++;
623
624     }
625     digit_str[i]= '\0';
626     return digit_str;
627 }
628
629
630
631 /* Type of Digits (octet 1, bits A-H) */
632 static const value_string ansi_map_type_of_digits_vals[] = {
633     {   0, "Not Used" },
634     {   1, "Dialed Number or Called Party Number" },
635     {   2, "Calling Party Number" },
636     {   3, "Caller Interaction" },
637     {   4, "Routing Number" },
638     {   5, "Billing Number" },
639     {   6, "Destination Number" },
640     {   7, "LATA" },
641     {   8, "Carrier" },
642     {   0, NULL }
643 };
644 /* Nature of Number (octet 2, bits A-H )*/
645 static const true_false_string ansi_map_na_bool_val  = {
646     "International",
647     "National"
648 };
649 static const true_false_string ansi_map_pi_bool_val  = {
650     "Presentation Restricted",
651     "Presentation Allowed"
652 };
653 static const true_false_string ansi_map_navail_bool_val  = {
654     "Number is not available",
655     "Number is available"
656 };
657 static const true_false_string ansi_map_si_bool_val  = {
658     "User provided, screening passed",
659     "User provided, not screened"
660 };
661 static const value_string ansi_map_si_vals[]  = {
662     {   0, "User provided, not screened"},
663     {   1, "User provided, screening passed"},
664     {   2, "User provided, screening failed"},
665     {   3, "Network provided"},
666     {   0, NULL }
667 };
668 /* Encoding (octet 3, bits A-D) */
669 static const value_string ansi_map_digits_enc_vals[]  = {
670     {   0, "Not used"},
671     {   1, "BCD"},
672     {   2, "IA5"},
673     {   3, "Octet string"},
674     {   0, NULL }
675 };
676 /* Numbering Plan (octet 3, bits E-H) */
677 static const value_string ansi_map_np_vals[]  = {
678     {   0, "Unknown or not applicable"},
679     {   1, "ISDN Numbering"},
680     {   2, "Telephony Numbering (ITU-T Rec. E.164,E.163)"},
681     {   3, "Data Numbering (ITU-T Rec. X.121)"},
682     {   4, "Telex Numbering (ITU-T Rec. F.69)"},
683     {   5, "Maritime Mobile Numbering"},
684     {   6, "Land Mobile Numbering (ITU-T Rec. E.212)"},
685     {   7, "Private Numbering Plan"},
686     {  13, "SS7 Point Code (PC) and Subsystem Number (SSN)"},
687     {  14, "Internet Protocol (IP) Address."},
688     {  15, "Reserved for extension"},
689     {   0, NULL }
690 };
691
692 static void
693 dissect_ansi_map_min_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
694     const char *digit_str;
695     int   offset = 0;
696
697     proto_tree *subtree;
698
699
700     subtree = proto_item_add_subtree(actx->created_item, ett_mintype);
701
702     digit_str = unpack_digits2(tvb, offset, &Dgt1_9_bcd);
703     proto_tree_add_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, digit_str);
704     proto_item_append_text(actx->created_item, " - %s", digit_str);
705 }
706
707 static void
708 dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
709
710     guint8 octet , octet_len;
711     guint8 b1,b2,b3,b4;
712     int    offset = 0;
713     const char *digit_str;
714
715     proto_tree *subtree;
716
717
718     subtree = proto_item_add_subtree(actx->created_item, ett_digitstype);
719
720     /* Octet 1 */
721     proto_tree_add_item(subtree, hf_ansi_map_type_of_digits, tvb, offset, 1, FALSE);
722     offset++;
723     /* Octet 2 */
724     proto_tree_add_item(subtree, hf_ansi_map_reservedBitHG, tvb, offset, 1, FALSE);
725     proto_tree_add_item(subtree, hf_ansi_map_si, tvb, offset, 1, FALSE);
726     proto_tree_add_item(subtree, hf_ansi_map_reservedBitD, tvb, offset, 1, FALSE);
727     proto_tree_add_item(subtree, hf_ansi_map_navail, tvb, offset, 1, FALSE);
728     proto_tree_add_item(subtree, hf_ansi_map_pi, tvb, offset, 1, FALSE);
729     proto_tree_add_item(subtree, hf_ansi_map_na, tvb, offset, 1, FALSE);
730     offset++;
731     /* Octet 3 */
732     octet = tvb_get_guint8(tvb,offset);
733     proto_tree_add_item(subtree, hf_ansi_map_np, tvb, offset, 1, FALSE);
734     proto_tree_add_item(subtree, hf_ansi_map_digits_enc, tvb, offset, 1, FALSE);
735     offset++;
736     /* Octet 4 - */
737     switch(octet>>4){
738     case 0:/* Unknown or not applicable */
739         switch ((octet&0xf)){
740         case 1:
741             /* BCD Coding */
742             octet_len = tvb_get_guint8(tvb,offset);
743             proto_tree_add_item(subtree, hf_ansi_map_nr_digits, tvb, offset, 1, FALSE);
744             if(octet_len == 0)
745                 return;
746             offset++;
747             digit_str = unpack_digits2(tvb, offset, &Dgt_tbcd);
748             proto_tree_add_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, digit_str);
749             proto_item_append_text(actx->created_item, " - %s", digit_str);
750             break;
751         case 2:
752             /* IA5 Coding */
753             octet_len = tvb_get_guint8(tvb,offset);
754             proto_tree_add_item(subtree, hf_ansi_map_nr_digits, tvb, offset, 1, FALSE);
755             if(octet_len == 0)
756                 return;
757             offset++;
758             proto_tree_add_item(subtree, hf_ansi_map_ia5_digits, tvb, offset, -1, FALSE);
759             proto_item_append_text(actx->created_item, " - %s", tvb_get_ephemeral_string(tvb,offset,tvb_length_remaining(tvb,offset)));
760             break;
761         case 3:
762             /* Octet string */
763             break;
764         default:
765             break;
766         }
767         break;
768     case 1:/* ISDN Numbering (not used in this Standard). */
769     case 3:/* Data Numbering (ITU-T Rec. X.121) (not used in this Standard). */
770     case 4:/* Telex Numbering (ITU-T Rec. F.69) (not used in this Standard). */
771     case 5:/* Maritime Mobile Numbering (not used in this Standard). */
772         proto_tree_add_text(subtree, tvb, offset, -1, "This Number plan should not have been used");
773         break;
774     case 2:/* Telephony Numbering (ITU-T Rec. E.164,E.163). */
775     case 6:/* Land Mobile Numbering (ITU-T Rec. E.212) */
776     case 7:/* Private Numbering Plan */
777         octet_len = tvb_get_guint8(tvb,offset);
778         proto_tree_add_item(subtree, hf_ansi_map_nr_digits, tvb, offset, 1, FALSE);
779         if(octet_len == 0)
780             return;
781         offset++;
782         switch ((octet&0xf)){
783         case 1:
784             /* BCD Coding */
785             digit_str = unpack_digits2(tvb, offset, &Dgt_tbcd);
786             proto_tree_add_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, digit_str);
787             proto_item_append_text(actx->created_item, " - %s", digit_str);
788             break;
789         case 2:
790             /* IA5 Coding */
791             proto_tree_add_item(subtree, hf_ansi_map_ia5_digits, tvb, offset, -1, FALSE);
792             proto_item_append_text(actx->created_item, " - %s", tvb_get_ephemeral_string(tvb,offset,tvb_length_remaining(tvb,offset)));
793             break;
794         case 3:
795             /* Octet string */
796             break;
797         default:
798             break;
799         }
800         break;
801     case 13:/* ANSI SS7 Point Code (PC) and Subsystem Number (SSN). */
802         switch ((octet&0xf)){
803         case 3:
804             /* Octet string */
805             /* Point Code Member Number octet 2 */
806             b1 = tvb_get_guint8(tvb,offset);
807             offset++;
808             /* Point Code Cluster Number octet 3 */
809             b2 = tvb_get_guint8(tvb,offset);
810             offset++;
811             /* Point Code Network Number octet 4 */
812             b3 = tvb_get_guint8(tvb,offset);
813             offset++;
814             /* Subsystem Number (SSN) octet 5 */
815             b4 = tvb_get_guint8(tvb,offset);
816             proto_tree_add_text(subtree, tvb, offset-3, 4 , "Point Code %u-%u-%u  SSN %u",
817                                 b3, b2, b1, b4);
818             proto_item_append_text(actx->created_item, " - Point Code %u-%u-%u  SSN %u", b3, b2, b1, b4);
819             break;
820         default:
821             break;
822         }
823         break;
824     case 14:/* Internet Protocol (IP) Address. */
825         break;
826     default:
827         proto_tree_add_text(subtree, tvb, offset, -1, "This Number plan should not have been used");
828         break;
829     }
830
831 }
832 /* 6.5.3.13. Subaddress */
833
834 static const true_false_string ansi_map_Odd_Even_Ind_bool_val  = {
835   "Odd",
836   "Even"
837 };
838 /* Type of Subaddress (octet 1, bits E-G) */
839 static const value_string ansi_map_sub_addr_type_vals[]  = {
840     {   0, "NSAP (CCITT Rec. X.213 or ISO 8348 AD2)"},
841     {   1, "User specified"},
842     {   2, "Reserved"},
843     {   3, "Reserved"},
844     {   4, "Reserved"},
845     {   5, "Reserved"},
846     {   6, "Reserved"},
847     {   7, "Reserved"},
848     {   0, NULL }
849 };
850
851 static void
852 dissect_ansi_map_subaddress(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
853     int offset = 0;
854
855     proto_tree *subtree;
856
857
858     subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
859     /* Type of Subaddress (octet 1, bits E-G) */
860     proto_tree_add_item(subtree, hf_ansi_map_subaddr_type, tvb, offset, 1, FALSE);
861     /* Odd/Even Indicator (O/E) (octet 1, bit D) */
862     proto_tree_add_item(subtree, hf_ansi_map_subaddr_odd_even, tvb, offset, 1, FALSE);
863
864 }
865 /*
866  * 6.5.2.2 ActionCode
867  * Table 114 ActionCode value
868  *
869  * 6.5.2.2 ActionCode(TIA/EIA-41.5-D, page 5-129) */
870
871 static const value_string ansi_map_ActionCode_vals[]  = {
872     {   0, "Not used"},
873     {   1, "Continue processing"},
874     {   2, "Disconnect call"},
875     {   3, "Disconnect call leg"},
876     {   4, "Conference Calling Drop Last Party"},
877     {   5, "Bridge call leg(s) to conference call"},
878     {   6, "Drop call leg on busy or routing failure"},
879     {   7, "Disconnect all call legs"},
880     {   8, "Attach MSC to OTAF"},
881     {   9, "Initiate RegistrationNotification"},
882     {  10, "Generate Public Encryption values"},
883     {  11, "Generate A-key"},
884     {  12, "Perform SSD Update procedure"},
885     {  13, "Perform Re-authentication procedure"},
886     {  14, "Release TRN"},
887     {  15, "Commit A-key"},
888     {  16, "Release Resources (e.g., A-key, Traffic Channel)"},
889     {  17, "Record NEWMSID"},
890     {  18, "Allocate Resources (e.g., Multiple message traffic channel delivery)."},
891     {  19, "Generate Authentication Signature"},
892     {  20, "Release leg and redirect subscriber"},
893     {  21, "Do Not Wait For MS User Level Response"},
894     {  22, "Prepare for CDMA Handset-Based Position Determination"},
895     {  23, "CDMA Handset-Based Position Determination Complete"},
896     {   0, NULL }
897 };
898 static value_string_ext ansi_map_ActionCode_vals_ext = VALUE_STRING_EXT_INIT(ansi_map_ActionCode_vals);
899
900 /* 6.5.2.3 AlertCode */
901
902 /* Pitch (octet 1, bits G-H) */
903 static const value_string ansi_map_AlertCode_Pitch_vals[]  = {
904     {   0, "Medium pitch"},
905     {   1, "High pitch"},
906     {   2, "Low pitch"},
907     {   3, "Reserved"},
908     {   0, NULL }
909 };
910 /* Cadence (octet 1, bits A-F) */
911 static const value_string ansi_map_AlertCode_Cadence_vals[]  = {
912     {   0, "NoTone"},
913     {   1, "Long"},
914     {   2, "ShortShort"},
915     {   3, "ShortShortLong"},
916     {   4, "ShortShort2"},
917     {   5, "ShortLongShort"},
918     {   6, "ShortShortShortShort"},
919     {   7, "PBXLong"},
920     {   8, "PBXShortShort"},
921     {   9, "PBXShortShortLong"},
922
923     {  10, "PBXShortLongShort"},
924     {  11, "PBXShortShortShortShort"},
925     {  12, "PipPipPipPip"},
926     {  13, "Reserved. Treat the same as value 0, NoTone"},
927     {  14, "Reserved. Treat the same as value 0, NoTone"},
928     {  15, "Reserved. Treat the same as value 0, NoTone"},
929     {  16, "Reserved. Treat the same as value 0, NoTone"},
930     {  17, "Reserved. Treat the same as value 0, NoTone"},
931     {  18, "Reserved. Treat the same as value 0, NoTone"},
932     {  19, "Reserved. Treat the same as value 0, NoTone"},
933     {   0, NULL }
934 };
935
936 /* Alert Action (octet 2, bits A-C) */
937 static const value_string ansi_map_AlertCode_Alert_Action_vals[]  = {
938     {   0, "Alert without waiting to report"},
939     {   1, "Apply a reminder alert once"},
940     {   2, "Other values reserved. Treat the same as value 0, Alert without waiting to report"},
941     {   3, "Other values reserved. Treat the same as value 0, Alert without waiting to report"},
942     {   4, "Other values reserved. Treat the same as value 0, Alert without waiting to report"},
943     {   5, "Other values reserved. Treat the same as value 0, Alert without waiting to report"},
944     {   6, "Other values reserved. Treat the same as value 0, Alert without waiting to report"},
945     {   7, "Other values reserved. Treat the same as value 0, Alert without waiting to report"},
946     {   0, NULL }
947 };
948 static void
949 dissect_ansi_map_alertcode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
950
951     int offset = 0;
952
953     proto_tree *subtree;
954
955
956     subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
957     /* Pitch (octet 1, bits G-H) */
958     proto_tree_add_item(subtree, hf_ansi_alertcode_pitch, tvb, offset, 1, FALSE);
959     /* Cadence (octet 1, bits A-F) */
960     proto_tree_add_item(subtree, hf_ansi_alertcode_cadence, tvb, offset, 1, FALSE);
961     offset++;
962
963     /* Alert Action (octet 2, bits A-C) */
964     proto_tree_add_item(subtree, hf_ansi_alertcode_alertaction, tvb, offset, 1, FALSE);
965
966 }
967 /* 6.5.2.4 AlertResult */
968 /* Result (octet 1) */
969 static const value_string ansi_map_AlertResult_result_vals[]  = {
970     {   0, "Not specified"},
971     {   1, "Success"},
972     {   2, "Failure"},
973     {   3, "Denied"},
974     {   4, "NotAttempted"},
975     {   5, "NoPageResponse"},
976     {   6, "Busy"},
977     {   0, NULL }
978 };
979
980 /* 6.5.2.5 AnnouncementCode Updatef from NS0018Re*/
981 /* Tone (octet 1) */
982 static const value_string ansi_map_AnnouncementCode_tone_vals[]  = {
983     {   0, "DialTone"},
984     {   1, "RingBack or AudibleAlerting"},
985     {   2, "InterceptTone or MobileReorder"},
986     {   3, "CongestionTone or ReorderTone"},
987     {   4, "BusyTone"},
988     {   5, "ConfirmationTone"},
989     {   6, "AnswerTone"},
990     {   7, "CallWaitingTone"},
991     {   8, "OffHookTone"},
992     {  17, "RecallDialTone"},
993     {  18, "BargeInTone"},
994     {  20, "PPCInsufficientTone"},
995     {  21, "PPCWarningTone1"},
996     {  22, "PPCWarningTone2"},
997     {  23, "PPCWarningTone3"},
998     {  24, "PPCDisconnectTone"},
999     {  25, "PPCRedirectTone"},
1000     {  63, "TonesOff"},
1001     { 192, "PipTone"},
1002     { 193, "AbbreviatedIntercept"},
1003     { 194, "AbbreviatedCongestion"},
1004     { 195, "WarningTone"},
1005     { 196, "DenialToneBurst"},
1006     { 197, "DialToneBurst"},
1007     { 250, "IncomingAdditionalCallTone"},
1008     { 251, "PriorityAdditionalCallTone"},
1009     {   0, NULL }
1010 };
1011 /* Class (octet 2, bits A-D) */
1012 static const value_string ansi_map_AnnouncementCode_class_vals[]  = {
1013     {   0, "Concurrent"},
1014     {   1, "Sequential"},
1015     {   0, NULL }
1016 };
1017 /* Standard Announcement (octet 3) Updated with N.S0015 */
1018 static const value_string ansi_map_AnnouncementCode_std_ann_vals[]  = {
1019     {   0, "None"},
1020     {   1, "UnauthorizedUser"},
1021     {   2, "InvalidESN"},
1022     {   3, "UnauthorizedMobile"},
1023     {   4, "SuspendedOrigination"},
1024     {   5, "OriginationDenied"},
1025     {   6, "ServiceAreaDenial"},
1026     {  16, "PartialDial"},
1027     {  17, "Require1Plus"},
1028     {  18, "Require1PlusNPA"},
1029     {  19, "Require0Plus"},
1030     {  20, "Require0PlusNPA"},
1031     {  21, "Deny1Plus"},
1032     {  22, "Unsupported10plus"},
1033     {  23, "Deny10plus"},
1034     {  24, "Unsupported10XXX"},
1035     {  25, "Deny10XXX"},
1036     {  26, "Deny10XXXLocally"},
1037     {  27, "Require10Plus"},
1038     {  28, "RequireNPA"},
1039     {  29, "DenyTollOrigination"},
1040     {  30, "DenyInternationalOrigination"},
1041     {  31, "Deny0Minus"},
1042     {  48, "DenyNumber"},
1043     {  49, "AlternateOperatorServices"},
1044     {  64, "No Circuit or AllCircuitsBusy or FacilityProblem"},
1045     {  65, "Overload"},
1046     {  66, "InternalOfficeFailure"},
1047     {  67, "NoWinkReceived"},
1048     {  68, "InterofficeLinkFailure"},
1049     {  69, "Vacant"},
1050     {  70, "InvalidPrefix or InvalidAccessCode"},
1051     {  71, "OtherDialingIrregularity"},
1052     {  80, "VacantNumber or DisconnectedNumber"},
1053     {  81, "DenyTermination"},
1054     {  82, "SuspendedTermination"},
1055     {  83, "ChangedNumber"},
1056     {  84, "InaccessibleSubscriber"},
1057     {  85, "DenyIncomingTol"},
1058     {  86, "RoamerAccessScreening"},
1059     {  87, "RefuseCall"},
1060     {  88, "RedirectCall"},
1061     {  89, "NoPageResponse"},
1062     {  90, "NoAnswer"},
1063     {  96, "RoamerIntercept"},
1064     {  97, "GeneralInformation"},
1065     { 112, "UnrecognizedFeatureCode"},
1066     { 113, "UnauthorizedFeatureCode"},
1067     { 114, "RestrictedFeatureCode"},
1068     { 115, "InvalidModifierDigits"},
1069     { 116, "SuccessfulFeatureRegistration"},
1070     { 117, "SuccessfulFeatureDeRegistration"},
1071     { 118, "SuccessfulFeatureActivation"},
1072     { 119, "SuccessfulFeatureDeActivation"},
1073     { 120, "InvalidForwardToNumber"},
1074     { 121, "CourtesyCallWarning"},
1075     { 128, "EnterPINSendPrompt"},
1076     { 129, "EnterPINPrompt"},
1077     { 130, "ReEnterPINSendPrompt"},
1078     { 131, "ReEnterPINPrompt"},
1079     { 132, "EnterOldPINSendPrompt"},
1080     { 133, "EnterOldPINPrompt"},
1081     { 134, "EnterNewPINSendPrompt"},
1082     { 135, "EnterNewPINPrompt"},
1083     { 136, "ReEnterNewPINSendPrompt"},
1084     { 137, "ReEnterNewPINPrompt"},
1085     { 138, "EnterPasswordPrompt"},
1086     { 139, "EnterDirectoryNumberPrompt"},
1087     { 140, "ReEnterDirectoryNumberPrompt"},
1088     { 141, "EnterFeatureCodePrompt"},
1089     { 142, "EnterEnterCreditCardNumberPrompt"},
1090     { 143, "EnterDestinationNumberPrompt"},
1091     { 152, "PPCInsufficientAccountBalance"},
1092     { 153, "PPCFiveMinuteWarning"},
1093     { 154, "PPCThreeMinuteWarning"},
1094     { 155, "PPCTwoMinuteWarning"},
1095     { 156, "PPCOneMinuteWarning"},
1096     { 157, "PPCDisconnect"},
1097     { 158, "PPCRedirect"},
1098     {   0, NULL }
1099 };
1100
1101
1102
1103 static void
1104 dissect_ansi_map_announcementcode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1105
1106     int offset = 0;
1107
1108     proto_tree *subtree;
1109
1110
1111     subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
1112
1113     /* Tone (octet 1) */
1114     proto_tree_add_item(subtree, hf_ansi_map_announcementcode_tone, tvb, offset, 1, FALSE);
1115     offset++;
1116     /* Class (octet 2, bits A-D) */
1117     proto_tree_add_item(subtree, hf_ansi_map_announcementcode_class, tvb, offset, 1, FALSE);
1118     offset++;
1119     /* Standard Announcement (octet 3) */
1120     proto_tree_add_item(subtree, hf_ansi_map_announcementcode_std_ann, tvb, offset, 1, FALSE);
1121     offset++;
1122     /* Custom Announcement ( octet 4 )
1123        e.       The assignment of this octet is left to bilateral agreement. When a Custom
1124        Announcement is specified it takes precedence over either the Standard
1125        Announcement or Tone
1126     */
1127     proto_tree_add_item(subtree, hf_ansi_map_announcementcode_cust_ann, tvb, offset, 1, FALSE);
1128
1129 }
1130 /* 6.5.2.8 AuthenticationCapability Updated N.S0003*/
1131 static const value_string ansi_map_AuthenticationCapability_vals[]  = {
1132     {   0, "Not used"},
1133     {   1, "No authentication required"},
1134     {   2, "Authentication required"},
1135     { 128, "Authentication required and UIM capable."},
1136     {   0, NULL }
1137 };
1138
1139 /* 6.5.2.14 AuthorizationPeriod*/
1140
1141 /* Period (octet 1) */
1142 static const value_string ansi_map_authorizationperiod_period_vals[]  = {
1143     {   0, "Not used"},
1144     {   1, "Per Call"},
1145     {   2, "Hours"},
1146     {   3, "Days"},
1147     {   4, "Weeks"},
1148     {   5, "Per Agreement"},
1149     {   6, "Indefinite (i.e., authorized until canceled or deregistered)"},
1150     {   7, "Number of calls. Re-authorization should be attempted after this number of (rejected) call attempts"},
1151     {   0, NULL }
1152 };
1153 /* Value (octet 2)
1154 Number of minutes hours, days, weeks, or
1155 number of calls (as per Period). If Period
1156 indicates anything else the Value is set to zero
1157 on sending and ignored on receipt.
1158 */
1159 static void
1160 dissect_ansi_map_authorizationperiod(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1161
1162     int offset = 0;
1163
1164     proto_tree *subtree;
1165
1166
1167     subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
1168     proto_tree_add_item(subtree, hf_ansi_map_authorizationperiod_period, tvb, offset, 1, FALSE);
1169     offset++;
1170     proto_tree_add_item(subtree, hf_ansi_map_value, tvb, offset, 1, FALSE);
1171
1172 }
1173 /* 6.5.2.15 AvailabilityType */
1174 static const value_string ansi_map_AvailabilityType_vals[]  = {
1175     {   0, "Not used"},
1176     {   1, "Unspecified MS inactivity type"},
1177     {   0, NULL }
1178 };
1179
1180 /* 6.5.2.16 BillingID */
1181 static void
1182 dissect_ansi_map_billingid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1183
1184     int offset = 0;
1185
1186     proto_tree *subtree;
1187
1188
1189     subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
1190
1191     proto_tree_add_item(subtree, hf_ansi_map_MarketID, tvb, offset, 2, FALSE);
1192     offset = offset + 2;
1193     proto_tree_add_item(subtree, hf_ansi_map_swno, tvb, offset, 1, FALSE);
1194     offset++;
1195     /* ID Number */
1196     proto_tree_add_item(subtree, hf_ansi_map_idno, tvb, offset, 3, FALSE);
1197     offset = offset + 3;
1198     proto_tree_add_item(subtree, hf_ansi_map_segcount, tvb, offset, 1, FALSE);
1199
1200 }
1201
1202
1203 /* 6.5.2.20 CallingFeaturesIndicator */
1204 static const value_string ansi_map_FeatureActivity_vals[]  = {
1205     {   0, "Not used"},
1206     {   1, "Not authorized"},
1207     {   2, "Authorized but de-activated"},
1208     {   3, "Authorized and activated"},
1209     {   0, NULL }
1210 };
1211
1212
1213 static void
1214 dissect_ansi_map_callingfeaturesindicator(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1215     int offset = 0;
1216     int length;
1217
1218     proto_tree *subtree;
1219
1220     length = tvb_length_remaining(tvb,offset);
1221
1222     subtree = proto_item_add_subtree(actx->created_item, ett_mscid);
1223
1224     /* Call Waiting: FeatureActivity, CW-FA (Octet 1 bits GH )          */
1225     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cwfa, tvb, offset, 1, FALSE);
1226     /* Call Forwarding No Answer FeatureActivity, CFNA-FA (Octet 1 bits EF )    */
1227     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cfnafa, tvb, offset, 1, FALSE);
1228     /* Call Forwarding Busy FeatureActivity, CFB-FA (Octet 1 bits CD )  */
1229     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cfbfa, tvb, offset, 1, FALSE);
1230     /* Call Forwarding Unconditional FeatureActivity, CFU-FA (Octet 1 bits AB ) */
1231     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cfufa, tvb, offset, 1, FALSE);
1232     offset++;
1233     length--;
1234
1235     /* Call Transfer: FeatureActivity, CT-FA (Octet 2 bits GH )         */
1236     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_ctfa, tvb, offset, 1, FALSE);
1237     /* Voice Privacy FeatureActivity, VP-FA (Octet 2 bits EF )  */
1238     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_vpfa, tvb, offset, 1, FALSE);
1239     /* Call Delivery: FeatureActivity (not interpreted on reception by IS-41-C or later)
1240        CD-FA (Octet 2 bits CD )         */
1241     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cdfa, tvb, offset, 1, FALSE);
1242     /* Three-Way Calling FeatureActivity, 3WC-FA (Octet 2 bits AB )     */
1243     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_3wcfa, tvb, offset, 1, FALSE);
1244     offset++;
1245     length--;
1246
1247
1248     /* Calling Number Identification Restriction Override FeatureActivity CNIROver-FA (Octet 3 bits GH )        */
1249     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cniroverfa, tvb, offset, 1, FALSE);
1250     /* Calling Number Identification Restriction: FeatureActivity CNIR-FA (Octet 3 bits EF )    */
1251     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cnirfa, tvb, offset, 1, FALSE);
1252     /* Calling Number Identification Presentation: FeatureActivity CNIP2-FA (Octet 3 bits CD )  */
1253     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cnip2fa, tvb, offset, 1, FALSE);
1254     /* Calling Number Identification Presentation: FeatureActivity CNIP1-FA (Octet 3 bits AB )  */
1255     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cnip1fa, tvb, offset, 1, FALSE);
1256     length--;
1257     if ( length == 0)
1258         return;
1259     offset++;
1260
1261     /* USCF divert to voice mail: FeatureActivity USCFvm-FA (Octet 4 bits GH )  */
1262     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_uscfvmfa, tvb, offset, 1, FALSE);
1263     /* Answer Hold: FeatureActivity AH-FA (Octet 4 bits EF ) N.S0029-0 v1.0     */
1264     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_ahfa, tvb, offset, 1, FALSE);
1265     /* Data Privacy Feature Activity DP-FA (Octet 4 bits CD ) N.S0008-0 v 1.0   */
1266     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_dpfa, tvb, offset, 1, FALSE);
1267     /* Priority Call Waiting FeatureActivity PCW-FA (Octet 4 bits AB )  */
1268     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_pcwfa, tvb, offset, 1, FALSE);
1269     length--;
1270     if ( length == 0)
1271         return;
1272     offset++;
1273
1274     /* USCF divert to mobile station provided DN:FeatureActivity.USCFms-FA (Octet 5 bits AB ) */
1275     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_uscfmsfa, tvb, offset, 1, FALSE);
1276     /* USCF divert to network registered DN:FeatureActivity. USCFnr-FA (Octet 5 bits CD )*/
1277     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_uscfnrfa, tvb, offset, 1, FALSE);
1278     /* CDMA-Packet Data Service: FeatureActivity. CPDS-FA (Octet 5 bits EF ) N.S0029-0 v1.0*/
1279     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cpdsfa, tvb, offset, 1, FALSE);
1280     /* CDMA-Concurrent Service:FeatureActivity. CCS-FA (Octet 5 bits GH ) N.S0029-0 v1.0*/
1281     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_ccsfa, tvb, offset, 1, FALSE);
1282     length--;
1283     if ( length == 0)
1284         return;
1285     offset++;
1286
1287     /* TDMA Enhanced Privacy and Encryption:FeatureActivity.TDMA EPE-FA (Octet 6 bits AB ) N.S0029-0 v1.0*/
1288     proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_epefa, tvb, offset, 1, FALSE);
1289 }
1290
1291
1292 /* 6.5.2.27 CancellationType */
1293 static const value_string ansi_map_CancellationType_vals[]  = {
1294     {   0, "Not used"},
1295     {   1, "ServingSystemOption"},
1296     {   2, "ReportInCall."},
1297     {   3, "Discontinue"},
1298     {   0, NULL }
1299 };
1300
1301 /* 6.5.2.29 CDMACallMode Updated with N.S0029-0 v1.0*/
1302 /* Call Mode (octet 1, bit A) */
1303 static const true_false_string ansi_map_CDMACallMode_cdma_bool_val  = {
1304   "CDMA 800 MHz channel (Band Class 0) acceptable.",
1305   "CDMA 800 MHz channel (Band Class 0) not acceptable"
1306 };
1307 /* Call Mode (octet 1, bit B) */
1308 static const true_false_string ansi_map_CallMode_amps_bool_val  = {
1309     "AAMPS 800 MHz channel acceptable",
1310     "AMPS 800 MHz channel not acceptable"
1311 };
1312 /* Call Mode (octet 1, bit C) */
1313 static const true_false_string ansi_map_CallMode_namps_bool_val  = {
1314     "NAMPS 800 MHz channel acceptable",
1315     "NAMPS 800 MHz channel not acceptable"
1316 };
1317 /* Call Mode (octet 1, bit D) */
1318 static const true_false_string ansi_map_CDMACallMode_cls1_bool_val  = {
1319     "CDMA 1900 MHz channel (Band Class 1) acceptable.",
1320     "CDMA 1900 MHz channel (Band Class 1) not acceptable"
1321 };
1322 /* Call Mode (octet 1, bit E) */
1323 static const true_false_string ansi_map_CDMACallMode_cls2_bool_val  = {
1324     "TACS channel (Band Class 2) acceptable",
1325     "TACS channel (Band Class 2) not acceptable"
1326 };
1327 /* Call Mode (octet 1, bit F) */
1328 static const true_false_string ansi_map_CDMACallMode_cls3_bool_val  = {
1329     "JTACS channel (Band Class 3) acceptable",
1330     "JTACS channel (Band Class 3) not acceptable"
1331 };
1332 /* Call Mode (octet 1, bit G) */
1333 static const true_false_string ansi_map_CDMACallMode_cls4_bool_val  = {
1334     "Korean PCS channel (Band Class 4) acceptable",
1335     "Korean PCS channel (Band Class 4) not acceptable"
1336 };
1337 /* Call Mode (octet 1, bit H) */
1338 static const true_false_string ansi_map_CDMACallMode_cls5_bool_val  = {
1339     "450 MHz channel (Band Class 5) not acceptable",
1340     "450 MHz channel (Band Class 5) not acceptable"
1341 };
1342 /* Call Mode (octet 2, bit A) */
1343 static const true_false_string ansi_map_CDMACallMode_cls6_bool_val  = {
1344     "2 GHz channel (Band Class 6) acceptable.",
1345     "2 GHz channel (Band Class 6) not acceptable."
1346 };
1347
1348 /* Call Mode (octet 2, bit B) */
1349 static const true_false_string ansi_map_CDMACallMode_cls7_bool_val  = {
1350     "700 MHz channel (Band Class 7) acceptable",
1351     "700 MHz channel (Band Class 7) not acceptable"
1352 };
1353
1354 /* Call Mode (octet 2, bit C) */
1355 static const true_false_string ansi_map_CDMACallMode_cls8_bool_val  = {
1356     "1800 MHz channel (Band Class 8) acceptable",
1357     "1800 MHz channel (Band Class 8) not acceptable"
1358 };
1359 /* Call Mode (octet 2, bit D) */
1360 static const true_false_string ansi_map_CDMACallMode_cls9_bool_val  = {
1361     "900 MHz channel (Band Class 9) acceptable",
1362     "900 MHz channel (Band Class 9) not acceptable"
1363 };
1364 /* Call Mode (octet 2, bit E) */
1365 static const true_false_string ansi_map_CDMACallMode_cls10_bool_val  = {
1366     "Secondary 800 MHz channel (Band Class 10) acceptable.",
1367     "Secondary 800 MHz channel (Band Class 10) not acceptable."
1368 };
1369
1370 static void
1371 dissect_ansi_map_cdmacallmode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1372     int offset = 0;
1373     int length;
1374
1375     proto_tree *subtree;
1376
1377     length = tvb_length_remaining(tvb,offset);
1378
1379
1380     subtree = proto_item_add_subtree(actx->created_item, ett_mscid);
1381     /* Call Mode (octet 1, bit H) */
1382     proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls5, tvb, offset, 1, FALSE);
1383     /* Call Mode (octet 1, bit G) */
1384     proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls4, tvb, offset, 1, FALSE);
1385     /* Call Mode (octet 1, bit F) */
1386     proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls3, tvb, offset, 1, FALSE);
1387     /* Call Mode (octet 1, bit E) */
1388     proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls2, tvb, offset, 1, FALSE);
1389     /* Call Mode (octet 1, bit D) */
1390     proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls1, tvb, offset, 1, FALSE);
1391     /* Call Mode (octet 1, bit C) */
1392     proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_namps, tvb, offset, 1, FALSE);
1393     /* Call Mode (octet 1, bit B) */
1394     proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_amps, tvb, offset, 1, FALSE);
1395     /* Call Mode (octet 1, bit A) */
1396     proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cdma, tvb, offset, 1, FALSE);
1397
1398     length--;
1399     if ( length == 0)
1400         return;
1401     offset++;
1402
1403     /* Call Mode (octet 2, bit E) */
1404     proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls10, tvb, offset, 1, FALSE);
1405     /* Call Mode (octet 2, bit D) */
1406     proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls9, tvb, offset, 1, FALSE);
1407     /* Call Mode (octet 2, bit C) */
1408     proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls8, tvb, offset, 1, FALSE);
1409     /* Call Mode (octet 2, bit B) */
1410     proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls7, tvb, offset, 1, FALSE);
1411     /* Call Mode (octet 2, bit A) */
1412     proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls6, tvb, offset, 1, FALSE);
1413
1414 }
1415 /* 6.5.2.30 CDMAChannelData */
1416 /* Updated with N.S0010-0 v 1.0 */
1417
1418 static const value_string ansi_map_cdmachanneldata_band_cls_vals[]  = {
1419     {   0, "800 MHz Cellular System"},
1420     {   0, NULL }
1421 };
1422
1423 static void
1424 dissect_ansi_map_cdmachanneldata(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1425
1426     int offset = 0;
1427     int length;
1428
1429     proto_tree *subtree;
1430
1431     length = tvb_length_remaining(tvb,offset);
1432
1433
1434     subtree = proto_item_add_subtree(actx->created_item, ett_cdmachanneldata);
1435
1436     proto_tree_add_item(subtree, hf_ansi_map_reservedBitH, tvb, offset, 1, FALSE);
1437     proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_Frame_Offset, tvb, offset, 1, FALSE);
1438     /* CDMA Channel Number */
1439     proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_CDMA_ch_no, tvb, offset, 2, FALSE);
1440     offset = offset + 2;
1441     length = length -2;
1442     /* Band Class */
1443     proto_tree_add_item(subtree, hf_ansi_map_reservedBitH, tvb, offset, 1, FALSE);
1444     proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_band_cls, tvb, offset, 1, FALSE);
1445     /* Long Code Mask */
1446     proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_lc_mask_b6, tvb, offset, 1, FALSE);
1447     offset++;
1448     proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_lc_mask_b5, tvb, offset, 1, FALSE);
1449     offset++;
1450     proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_lc_mask_b4, tvb, offset, 1, FALSE);
1451     offset++;
1452     proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_lc_mask_b3, tvb, offset, 1, FALSE);
1453     offset++;
1454     proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_lc_mask_b2, tvb, offset, 1, FALSE);
1455     offset++;
1456     proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_lc_mask_b1, tvb, offset, 1, FALSE);
1457     length = length - 6;
1458     if (length == 0)
1459         return;
1460     offset++;
1461     /* NP_EXT */
1462     proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_np_ext, tvb, offset, 1, FALSE);
1463     /* Nominal Power */
1464     proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_nominal_pwr, tvb, offset, 1, FALSE);
1465     /* Number Preamble */
1466     proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_nr_preamble, tvb, offset, 1, FALSE);
1467
1468 }
1469 /* 6.5.2.31 CDMACodeChannel */
1470
1471 /* 6.5.2.41 CDMAStationClassMark */
1472 /* Power Class: (PC) (octet 1, bits A and B) */
1473 static const value_string ansi_map_CDMAStationClassMark_pc_vals[]  = {
1474     {   0, "Class I"},
1475     {   1, "Class II"},
1476     {   2, "Class III"},
1477     {   3, "Reserved"},
1478     {   0, NULL }
1479 };
1480 /* Analog Transmission: (DTX) (octet 1, bit C) */
1481 static const true_false_string ansi_map_CDMAStationClassMark_dtx_bool_val  = {
1482     "Discontinuous",
1483     "Continuous"
1484 };
1485 /* Slotted Mode Indicator: (SMI) (octet 1, bit F) */
1486 static const true_false_string ansi_map_CDMAStationClassMark_smi_bool_val  = {
1487     "Slotted capable",
1488     "Slotted incapable"
1489 };
1490 /* Dual-mode Indicator(DMI) (octet 1, bit G) */
1491 static const true_false_string ansi_map_CDMAStationClassMark_dmi_bool_val  = {
1492     "Dual-mode CDMA",
1493     "CDMA only"
1494 };
1495
1496
1497 static void
1498 dissect_ansi_map_cdmastationclassmark(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1499     int offset = 0;
1500
1501     proto_tree *subtree;
1502
1503
1504     subtree = proto_item_add_subtree(actx->created_item, ett_cdmastationclassmark);
1505
1506     proto_tree_add_item(subtree, hf_ansi_map_reservedBitH, tvb, offset, 1, FALSE);
1507     /* Dual-mode Indicator(DMI) (octet 1, bit G) */
1508     proto_tree_add_item(subtree, hf_ansi_map_cdmastationclassmark_dmi, tvb, offset, 1, FALSE);
1509     /* Slotted Mode Indicator: (SMI) (octet 1, bit F) */
1510     proto_tree_add_item(subtree, hf_ansi_map_cdmastationclassmark_smi, tvb, offset, 1, FALSE);
1511     proto_tree_add_item(subtree, hf_ansi_map_reservedBitED, tvb, offset, 1, FALSE);
1512     /* Analog Transmission: (DTX) (octet 1, bit C) */
1513     proto_tree_add_item(subtree, hf_ansi_map_cdmastationclassmark_dtx, tvb, offset, 1, FALSE);
1514     /* Power Class: (PC) (octet 1, bits A and B) */
1515     proto_tree_add_item(subtree, hf_ansi_map_cdmastationclassmark_pc, tvb, offset, 1, FALSE);
1516 }
1517 /* 6.5.2.47 ChannelData */
1518 /* Discontinuous Transmission Mode (DTX) (octet 1, bits E and D) */
1519 static const value_string ansi_map_ChannelData_dtx_vals[]  = {
1520     {   0, "DTX disabled"},
1521     {   1, "Reserved. Treat the same as value 00, DTX disabled."},
1522     {   2, "DTX-low mode"},
1523     {   3, "DTX mode active or acceptable"},
1524     {   0, NULL }
1525 };
1526
1527
1528 static void
1529 dissect_ansi_map_channeldata(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1530     int offset = 0;
1531
1532     proto_tree *subtree;
1533
1534
1535     subtree = proto_item_add_subtree(actx->created_item, ett_channeldata);
1536
1537     /* SAT Color Code (SCC) (octet 1, bits H and G) */
1538     proto_tree_add_item(subtree, hf_ansi_map_channeldata_scc, tvb, offset, 1, FALSE);
1539     /* Discontinuous Transmission Mode (DTX) (octet 1, bits E and D) */
1540     proto_tree_add_item(subtree, hf_ansi_map_channeldata_dtx, tvb, offset, 1, FALSE);
1541     /* Voice Mobile Attenuation Code (VMAC) (octet 1, bits A - C)*/
1542     proto_tree_add_item(subtree, hf_ansi_map_channeldata_vmac, tvb, offset, 1, FALSE);
1543
1544     offset++;
1545     /* Channel Number (CHNO) ( octet 2 and 3 ) */
1546     proto_tree_add_item(subtree, hf_ansi_map_channeldata_chno, tvb, offset, 2, FALSE);
1547
1548 }
1549
1550 /* 6.5.2.50 ConfidentialityModes */
1551 /* Updated with N.S0008-0 v 1.0*/
1552 /* Voice Privacy (VP) Confidentiality Status (octet 1, bit A) */
1553
1554 static const true_false_string ansi_map_ConfidentialityModes_bool_val  = {
1555     "On",
1556     "Off"
1557 };
1558 static void
1559 dissect_ansi_map_confidentialitymodes(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1560     int offset = 0;
1561
1562     proto_tree *subtree;
1563
1564
1565     subtree = proto_item_add_subtree(actx->created_item, ett_confidentialitymodes);
1566
1567     /* DataPrivacy (DP) Confidentiality Status (octet 1, bit C) */
1568     proto_tree_add_item(subtree, hf_ansi_map_ConfidentialityModes_dp, tvb, offset, 1, FALSE);
1569     /* Signaling Message Encryption (SE) Confidentiality Status (octet 1, bit B) */
1570     proto_tree_add_item(subtree, hf_ansi_map_ConfidentialityModes_se, tvb, offset, 1, FALSE);
1571     /* Voice Privacy (VP) Confidentiality Status (octet 1, bit A) */
1572     proto_tree_add_item(subtree, hf_ansi_map_ConfidentialityModes_vp, tvb, offset, 1, FALSE);
1573
1574 }
1575
1576 /* 6.5.2.51 ControlChannelData */
1577
1578 /* Digital Color Code (DCC) (octet 1, bit H and G) */
1579 /* Control Mobile Attenuation Code (CMAC) (octet 1, bit A - C) */
1580 /* Channel Number (CHNO) ( octet 2 and 3 ) */
1581 /* Supplementary Digital Color Codes (SDCC1 and SDCC2) */
1582 /* SDCC1 ( octet 4, bit D and C )*/
1583 /* SDCC2 ( octet 4, bit A and B )*/
1584
1585 static void
1586 dissect_ansi_map_controlchanneldata(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1587     int offset = 0;
1588
1589     proto_tree *subtree;
1590
1591
1592     subtree = proto_item_add_subtree(actx->created_item, ett_controlchanneldata);
1593
1594     /* Digital Color Code (DCC) (octet 1, bit H and G) */
1595     proto_tree_add_item(subtree, hf_ansi_map_controlchanneldata_dcc, tvb, offset, 1, FALSE);
1596     proto_tree_add_item(subtree, hf_ansi_map_reservedBitFED, tvb, offset, 1, FALSE);
1597     /* Control Mobile Attenuation Code (CMAC) (octet 1, bit A - C) */
1598     proto_tree_add_item(subtree, hf_ansi_map_controlchanneldata_cmac, tvb, offset, 1, FALSE);
1599     offset++;
1600     /* Channel Number (CHNO) ( octet 2 and 3 ) */
1601     proto_tree_add_item(subtree, hf_ansi_map_controlchanneldata_chno, tvb, offset, 2, FALSE);
1602     /* Supplementary Digital Color Codes (SDCC1 and SDCC2) */
1603     offset = offset +2;
1604     /* SDCC1 ( octet 4, bit D and C )*/
1605     proto_tree_add_item(subtree, hf_ansi_map_controlchanneldata_sdcc1, tvb, offset, 1, FALSE);
1606     proto_tree_add_item(subtree, hf_ansi_map_reservedBitHGFE, tvb, offset, 1, FALSE);
1607     /* SDCC2 ( octet 4, bit A and B )*/
1608     proto_tree_add_item(subtree, hf_ansi_map_controlchanneldata_sdcc2, tvb, offset, 1, FALSE);
1609
1610 }
1611
1612 /* 6.5.2.52 CountUpdateReport */
1613 static const value_string ansi_map_CountUpdateReport_vals[]  = {
1614     {   0, "Class I"},
1615     {   1, "Class II"},
1616     {   2, "Class III"},
1617     {   3, "Reserved"},
1618     {   0, NULL }
1619 };
1620
1621 /* 6.5.2.53 DeniedAuthorizationPeriod */
1622 /* Period (octet 1) */
1623 static const value_string ansi_map_deniedauthorizationperiod_period_vals[]  = {
1624     {   0, "Not used"},
1625     {   1, "Per Call. Re-authorization should be attempted on the next call attempt"},
1626     {   2, "Hours"},
1627     {   3, "Days"},
1628     {   4, "Weeks"},
1629     {   5, "Per Agreement"},
1630     {   6, "Reserved"},
1631     {   7, "Number of calls. Re-authorization should be attempted after this number of (rejected) call attempts"},
1632     {   8, "Minutes"},
1633     {   0, NULL }
1634 };
1635 /* Value (octet 2)
1636 Number of minutes hours, days, weeks, or
1637 number of calls (as per Period). If Period
1638 indicates anything else the Value is set to zero
1639 on sending and ignored on receipt.
1640 */
1641
1642 static void
1643 dissect_ansi_map_deniedauthorizationperiod(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1644
1645     int offset = 0;
1646
1647     proto_tree *subtree;
1648
1649
1650     subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
1651     proto_tree_add_item(subtree, hf_ansi_map_deniedauthorizationperiod_period, tvb, offset, 1, FALSE);
1652     offset++;
1653     proto_tree_add_item(subtree, hf_ansi_map_value, tvb, offset, 1, FALSE);
1654
1655 }
1656
1657
1658 /* 6.5.2.57 DigitCollectionControl */
1659 /* TODO Add decoding here */
1660
1661 /* 6.5.2.64 ExtendedMSCID */
1662 static const value_string ansi_map_msc_type_vals[]  = {
1663     {   0, "Not specified"},
1664     {   1, "Serving MSC"},
1665     {   2, "Home MSC"},
1666     {   3, "Gateway MSC"},
1667     {   4, "HLR"},
1668     {   5, "VLR"},
1669     {   6, "EIR (reserved)"},
1670     {   7, "AC"},
1671     {   8, "Border MSC"},
1672     {   9, "Originating MSC"},
1673     {   0, NULL }
1674 };
1675
1676 static void
1677 dissect_ansi_map_extendedmscid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1678
1679     int offset = 0;
1680
1681     proto_tree *subtree;
1682
1683
1684     subtree = proto_item_add_subtree(actx->created_item, ett_extendedmscid);
1685     /* Type (octet 1) */
1686     proto_tree_add_item(subtree, hf_ansi_map_msc_type, tvb, offset, 1, FALSE);
1687     offset++;
1688     proto_tree_add_item(subtree, hf_ansi_map_MarketID, tvb, offset, 2, FALSE);
1689     offset = offset + 2;
1690     proto_tree_add_item(subtree, hf_ansi_map_swno, tvb, offset, 1, FALSE);
1691
1692 }
1693 /* 6.5.2.65 ExtendedSystemMyTypeCode */
1694 static void
1695 dissect_ansi_map_extendedsystemmytypecode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx){
1696
1697     int offset = 0;
1698
1699     proto_tree *subtree;
1700
1701
1702     subtree = proto_item_add_subtree(actx->created_item, ett_extendedsystemmytypecode);
1703     /* Type (octet 1) */
1704     proto_tree_add_item(subtree, hf_ansi_map_msc_type, tvb, offset, 1, FALSE);
1705     offset++;
1706     offset = dissect_ansi_map_SystemMyTypeCode(TRUE, tvb, offset, actx, subtree, hf_ansi_map_systemMyTypeCode);
1707 }
1708
1709
1710 /* 6.5.2.68 GeographicAuthorization */
1711 /* Geographic Authorization (octet 1) */
1712 static const value_string ansi_map_GeographicAuthorization_vals[]  = {
1713     {   0, "Not used"},
1714     {   1, "Authorized for all MarketIDs served by the VLR"},
1715     {   2, "Authorized for this MarketID only"},
1716     {   3, "Authorized for this MarketID and Switch Number only"},
1717     {   4, "Authorized for this LocationAreaID within a MarketID only"},
1718     {   5, "VLR"},
1719     {   6, "EIR (reserved)"},
1720     {   7, "AC"},
1721     {   8, "Border MSC"},
1722     {   9, "Originating MSC"},
1723     {   0, NULL }
1724 };
1725
1726 /* 6.5.2.71 HandoffState */
1727 /* Party Involved (PI) (octet 1, bit A) */
1728 static const true_false_string ansi_map_HandoffState_pi_bool_val  = {
1729     "Terminator is handing off",
1730     "Originator is handing off"
1731 };
1732 static void
1733 dissect_ansi_map_handoffstate(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1734
1735     int offset = 0;
1736
1737     proto_tree *subtree;
1738
1739
1740     subtree = proto_item_add_subtree(actx->created_item, ett_handoffstate);
1741     /* Party Involved (PI) (octet 1, bit A) */
1742     proto_tree_add_item(subtree, hf_ansi_map_handoffstate_pi, tvb, offset, 1, FALSE);
1743 }
1744
1745 /* 6.5.2.72 InterMSCCircuitID */
1746 /* Trunk Member Number (M) Octet2 */
1747 static void
1748 dissect_ansi_map_intermsccircuitid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1749
1750     int offset = 0;
1751
1752     proto_tree *subtree;
1753     guint8 octet, octet2;
1754
1755
1756     subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
1757     /* Trunk Group Number (G) Octet 1 */
1758     octet = tvb_get_guint8(tvb,offset);
1759     proto_tree_add_item(subtree, hf_ansi_map_tgn, tvb, offset, 1, FALSE);
1760     offset++;
1761     /* Trunk Member Number (M) Octet2 */
1762     octet2 = tvb_get_guint8(tvb,offset);
1763     proto_tree_add_item(subtree, hf_ansi_map_tmn, tvb, offset, 1, FALSE);
1764     proto_item_append_text(actx->created_item, " (G %u/M %u)", octet, octet2);
1765 }
1766
1767 /* 6.5.2.78 MessageWaitingNotificationCount */
1768 /* Type of messages (octet 1) */
1769 static const value_string ansi_map_MessageWaitingNotificationCount_type_vals[]  = {
1770     {   0, "Voice messages"},
1771     {   1, "Short Message Services (SMS) messages"},
1772     {   2, "Group 3 (G3) Fax messages"},
1773     {   0, NULL }
1774 };
1775
1776 static void
1777 dissect_ansi_map_messagewaitingnotificationcount(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1778
1779     int offset = 0;
1780
1781     proto_tree *subtree;
1782
1783
1784     subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
1785     /* Type of messages (octet 1) */
1786     proto_tree_add_item(subtree, hf_ansi_map_messagewaitingnotificationcount_tom, tvb, offset, 1, FALSE);
1787     offset++;
1788     /* Number of Messages Waiting (octet 2) */
1789     proto_tree_add_item(subtree, hf_ansi_map_messagewaitingnotificationcount_no_mw, tvb, offset, 1, FALSE);
1790
1791 }
1792
1793 /* 6.5.2.79 MessageWaitingNotificationType */
1794 /* Pip Tone (PT) (octet 1, bit A) */
1795 static const true_false_string ansi_map_MessageWaitingNotificationType_pt_bool_val  = {
1796     "Pip Tone (PT) notification is required",
1797     "Pip Tone (PT) notification is not authorized or no notification is required"
1798 };
1799 /* Alert Pip Tone (APT) (octet 1, bit B) */
1800 static const true_false_string ansi_map_MessageWaitingNotificationType_apt_bool_val  = {
1801     "Alert Pip Tone (APT) notification is required",
1802     "Alert Pip Tone (APT) notification is not authorized or notification is not required"
1803 };
1804 /* Message Waiting Indication (MWI) (octet 1, bits C and D) */
1805 static const value_string ansi_map_MessageWaitingNotificationType_mwi_vals[]  = {
1806     {   0, "No MWI. Message Waiting Indication (MWI) notification is not authorized or notification is not required"},
1807     {   1, "Reserved"},
1808     {   2, "MWI On. Message Waiting Indication (MWI) notification is required. Messages waiting"},
1809     {   3, "MWI Off. Message Waiting Indication (MWI) notification is required. No messages waiting"},
1810     {   0, NULL }
1811 };
1812
1813 static void
1814 dissect_ansi_map_messagewaitingnotificationtype(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1815
1816     int offset = 0;
1817
1818     proto_tree *subtree;
1819
1820
1821     subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
1822
1823     /* Message Waiting Indication (MWI) (octet 1, bits C and D) */
1824     proto_tree_add_item(subtree, hf_ansi_map_messagewaitingnotificationtype_mwi, tvb, offset, 1, FALSE);
1825     /* Alert Pip Tone (APT) (octet 1, bit B) */
1826     proto_tree_add_item(subtree, hf_ansi_map_messagewaitingnotificationtype_apt, tvb, offset, 1, FALSE);
1827     /* Pip Tone (PT) (octet 1, bit A) */
1828     proto_tree_add_item(subtree, hf_ansi_map_messagewaitingnotificationtype_pt, tvb, offset, 1, FALSE);
1829 }
1830
1831 /* 6.5.2.81 MobileIdentificationNumber */
1832
1833 /* 6.5.2.82 MSCID */
1834
1835 static void
1836 dissect_ansi_map_mscid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1837     int offset = 0;
1838
1839     proto_tree *subtree;
1840
1841
1842     subtree = proto_item_add_subtree(actx->created_item, ett_mscid);
1843
1844     proto_tree_add_item(subtree, hf_ansi_map_MarketID, tvb, offset, 2, FALSE);
1845     offset = offset + 2;
1846     proto_tree_add_item(subtree, hf_ansi_map_swno, tvb, offset, 1, FALSE);
1847 }
1848
1849
1850 /* 6.5.2.84 MSLocation */
1851 static void
1852 dissect_ansi_map_mslocation(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1853     int offset = 0;
1854
1855     proto_tree *subtree;
1856
1857
1858     subtree = proto_item_add_subtree(actx->created_item, ett_mscid);
1859
1860     /* Latitude in tenths of a second octet 1 - 3 */
1861     proto_tree_add_item(subtree, hf_ansi_map_mslocation_lat, tvb, offset, 3, FALSE);
1862     offset = offset + 3;
1863     /* Longitude in tenths of a second octet 4 - 6 */
1864     proto_tree_add_item(subtree, hf_ansi_map_mslocation_long, tvb, offset, 3, FALSE);
1865     offset = offset + 3;
1866     /* Resolution in units of 1 foot octet 7, octet 8 optional */
1867     proto_tree_add_item(subtree, hf_ansi_map_mslocation_res, tvb, offset, -1, FALSE);
1868
1869 }
1870 /* 6.5.2.85 NAMPSCallMode */
1871 static void
1872 dissect_ansi_map_nampscallmode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1873     int offset = 0;
1874     proto_tree *subtree;
1875
1876
1877     subtree = proto_item_add_subtree(actx->created_item, ett_mscid);
1878
1879     /* Call Mode (octet 1, bits A and B) */
1880     proto_tree_add_item(subtree, hf_ansi_map_nampscallmode_amps, tvb, offset, 1, FALSE);
1881     proto_tree_add_item(subtree, hf_ansi_map_nampscallmode_namps, tvb, offset, 1, FALSE);
1882 }
1883
1884 /* 6.5.2.86 NAMPSChannelData */
1885 /* Narrow Analog Voice Channel Assignment (NAVCA) (octet 1, bits A and B) */
1886 static const value_string ansi_map_NAMPSChannelData_navca_vals[]  = {
1887     {   0, "Wide. 30 kHz AMPS voice channel"},
1888     {   1, "Upper. 10 kHz NAMPS voice channel"},
1889     {   2, "Middle. 10 kHz NAMPS voice channel"},
1890     {   3, "Lower. 10 kHz NAMPS voice channel"},
1891     {   0, NULL }
1892 };
1893 /* Color Code Indicator (CCIndicator) (octet 1, bits C, D, and E) */
1894 static const value_string ansi_map_NAMPSChannelData_ccinidicator_vals[]  = {
1895     {   0, "ChannelData parameter SCC field applies"},
1896     {   1, "Digital SAT Color Code 1 (ignore SCC field)"},
1897     {   2, "Digital SAT Color Code 2 (ignore SCC field)"},
1898     {   3, "Digital SAT Color Code 3 (ignore SCC field)"},
1899     {   4, "Digital SAT Color Code 4 (ignore SCC field)"},
1900     {   5, "Digital SAT Color Code 5 (ignore SCC field)"},
1901     {   6, "Digital SAT Color Code 6 (ignore SCC field)"},
1902     {   7, "Digital SAT Color Code 7 (ignore SCC field)"},
1903     {   0, NULL }
1904 };
1905
1906
1907
1908 static void
1909 dissect_ansi_map_nampschanneldata(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1910     int offset = 0;
1911     proto_tree *subtree;
1912
1913
1914     subtree = proto_item_add_subtree(actx->created_item, ett_mscid);
1915
1916     /* Color Code Indicator (CCIndicator) (octet 1, bits C, D, and E) */
1917     proto_tree_add_item(subtree, hf_ansi_map_nampschanneldata_CCIndicator, tvb, offset, 1, FALSE);
1918     /* Narrow Analog Voice Channel Assignment (NAVCA) (octet 1, bits A and B) */
1919     proto_tree_add_item(subtree, hf_ansi_map_nampschanneldata_navca, tvb, offset, 1, FALSE);
1920
1921 }
1922
1923 /* 6.5.2.88 OneTimeFeatureIndicator */
1924 /* updated with N.S0012 */
1925 /* Call Waiting for Future Incoming Call (CWFI) (octet 1, bits A and B) */
1926 /* Call Waiting for Incoming Call (CWIC) (octet 1, bits C and D) */
1927
1928 static const value_string ansi_map_onetimefeatureindicator_cw_vals[]  = {
1929     {   0, "Ignore"},
1930     {   1, "No CW"},
1931     {   2, "Normal CW"},
1932     {   3, "Priority CW"},
1933     {   0, NULL }
1934 };
1935 /* MessageWaitingNotification (MWN) (octet 1, bits E and F) */
1936 static const value_string ansi_map_onetimefeatureindicator_mwn_vals[]  = {
1937     {   0, "Ignore"},
1938     {   1, "Pip Tone Inactive"},
1939     {   2, "Pip Tone Active"},
1940     {   3, "Reserved"},
1941     {   0, NULL }
1942 };
1943 /* Calling Number Identification Restriction (CNIR) (octet 1, bits G and H)*/
1944 static const value_string ansi_map_onetimefeatureindicator_cnir_vals[]  = {
1945     {   0, "Ignore"},
1946     {   1, "CNIR Inactive"},
1947     {   2, "CNIR Active"},
1948     {   3, "Reserved"},
1949     {   0, NULL }
1950 };
1951
1952 /* Priority Access and Channel Assignment (PACA) (octet 2, bits A and B)*/
1953 static const value_string ansi_map_onetimefeatureindicator_paca_vals[]  = {
1954     {   0, "Ignore"},
1955     {   1, "PACA Demand Inactive"},
1956     {   2, "PACA Demand Activated"},
1957     {   3, "Reserved"},
1958     {   0, NULL }
1959 };
1960
1961 /* Flash Privileges (Flash) (octet 2, bits C and D) */
1962 static const value_string ansi_map_onetimefeatureindicator_flash_vals[]  = {
1963     {   0, "Ignore"},
1964     {   1, "Flash Inactive"},
1965     {   2, "Flash Active"},
1966     {   3, "Reserved"},
1967     {   0, NULL }
1968 };
1969 /* Calling Name Restriction (CNAR) (octet 2, bits E and F) */
1970 static const value_string ansi_map_onetimefeatureindicator_cnar_vals[]  = {
1971     {   0, "Ignore"},
1972     {   1, "Presentation Allowed"},
1973     {   2, "Presentation Restricted."},
1974     {   3, "Blocking Toggle"},
1975     {   0, NULL }
1976 };
1977 static void
1978 dissect_ansi_map_onetimefeatureindicator(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1979     int offset = 0;
1980     proto_tree *subtree;
1981
1982
1983     subtree = proto_item_add_subtree(actx->created_item, ett_mscid);
1984
1985     /* Calling Number Identification Restriction (CNIR) (octet 1, bits G and H)*/
1986     /* MessageWaitingNotification (MWN) (octet 1, bits E and F) */
1987     /* Call Waiting for Incoming Call (CWIC) (octet 1, bits C and D) */
1988     /* Call Waiting for Future Incoming Call (CWFI) (octet 1, bits A and B) */
1989     offset++;
1990     /* Calling Name Restriction (CNAR) (octet 2, bits E and F) */
1991     /* Flash Privileges (Flash) (octet 2, bits C and D) */
1992     /* Priority Access and Channel Assignment (PACA) (octet 2, bits A and B)*/
1993
1994
1995 }
1996
1997 /* 6.5.2.90 OriginationTriggers */
1998 /* All Origination (All) (octet 1, bit A) */
1999 static const true_false_string ansi_map_originationtriggers_all_bool_val  = {
2000     "Launch an OriginationRequest for any call attempt. This overrides all other values",
2001     "Trigger is not active"
2002 };
2003
2004 /* Local (octet 1, bit B) */
2005 static const true_false_string ansi_map_originationtriggers_local_bool_val  = {
2006     "Launch an OriginationRequest for any local call attempt",
2007     "Trigger is not active"
2008 };
2009
2010 /* Intra-LATA Toll (ILATA) (octet 1, bit C) */
2011 static const true_false_string ansi_map_originationtriggers_ilata_bool_val  = {
2012     "Launch an OriginationRequest for any intra-LATA call attempt",
2013     "Trigger is not active"
2014 };
2015 /* Inter-LATA Toll (OLATA) (octet 1, bit D) */
2016 static const true_false_string ansi_map_originationtriggers_olata_bool_val  = {
2017     "Launch an OriginationRequest for any inter-LATA toll call attempt",
2018     "Trigger is not active"
2019 };
2020 /* International (Int'l ) (octet 1, bit E) */
2021 static const true_false_string ansi_map_originationtriggers_int_bool_val  = {
2022     "Launch an OriginationRequest for any international call attempt",
2023     "Trigger is not active"
2024 };
2025 /* World Zone (WZ) (octet 1, bit F) */
2026 static const true_false_string ansi_map_originationtriggers_wz_bool_val  = {
2027     "Launch an OriginationRequest for any call attempt outside of the current World Zone (as defined in ITU-T Rec. E.164)",
2028     "Trigger is not active"
2029 };
2030
2031 /* Unrecognized Number (Unrec) (octet 1, bit G) */
2032 static const true_false_string ansi_map_originationtriggers_unrec_bool_val  = {
2033     "Launch an OriginationRequest for any call attempt to an unrecognized number",
2034     "Trigger is not active"
2035 };
2036 /* Revertive Call (RvtC) (octet 1, bit H)*/
2037 static const true_false_string ansi_map_originationtriggers_rvtc_bool_val  = {
2038     "Launch an OriginationRequest for any Revertive Call attempt",
2039     "Trigger is not active"
2040 };
2041
2042 /* Star (octet 2, bit A) */
2043 static const true_false_string ansi_map_originationtriggers_star_bool_val  = {
2044     "Launch an OriginationRequest for any number beginning with a Star '*' digit",
2045     "Trigger is not active"
2046 };
2047
2048 /* Double Star (DS) (octet 2, bit B) */
2049 static const true_false_string ansi_map_originationtriggers_ds_bool_val  = {
2050     "Launch an OriginationRequest for any number beginning with two Star '**' digits",
2051     "Trigger is not active"
2052 };
2053 /* Pound (octet 2, bit C) */
2054 static const true_false_string ansi_map_originationtriggers_pound_bool_val  = {
2055     "Launch an OriginationRequest for any number beginning with a Pound '#' digit",
2056     "Trigger is not active"
2057 };
2058 /* Double Pound (DP) (octet 2, bit D) */
2059 static const true_false_string ansi_map_originationtriggers_dp_bool_val  = {
2060     "Launch an OriginationRequest for any number beginning with two Pound '##' digits",
2061     "Trigger is not active"
2062 };
2063 /* Prior Agreement (PA) (octet 2, bit E) */
2064 static const true_false_string ansi_map_originationtriggers_pa_bool_val  = {
2065     "Launch an OriginationRequest for any number matching a criteria of a prior agreement",
2066     "Trigger is not active"
2067 };
2068
2069 /* No digits (octet 3, bit A) */
2070 static const true_false_string ansi_map_originationtriggers_nodig_bool_val  = {
2071     "Launch an OriginationRequest for any call attempt with no digits",
2072     "Trigger is not active"
2073 };
2074
2075 /* 1 digit (octet 3, bit B) */
2076 static const true_false_string ansi_map_originationtriggers_onedig_bool_val  = {
2077     "Launch an OriginationRequest for any call attempt with 1 digit",
2078     "Trigger is not active"
2079 };
2080 /* 1 digit (octet 3, bit C) */
2081 static const true_false_string ansi_map_originationtriggers_twodig_bool_val  = {
2082     "Launch an OriginationRequest for any call attempt with 2 digits",
2083     "Trigger is not active"
2084 };
2085 /* 1 digit (octet 3, bit D) */
2086 static const true_false_string ansi_map_originationtriggers_threedig_bool_val  = {
2087     "Launch an OriginationRequest for any call attempt with 3 digits",
2088     "Trigger is not active"
2089 };
2090 /* 1 digit (octet 3, bit E) */
2091 static const true_false_string ansi_map_originationtriggers_fourdig_bool_val  = {
2092     "Launch an OriginationRequest for any call attempt with 4 digits",
2093     "Trigger is not active"
2094 };
2095 /* 1 digit (octet 3, bit F) */
2096 static const true_false_string ansi_map_originationtriggers_fivedig_bool_val  = {
2097     "Launch an OriginationRequest for any call attempt with 5 digits",
2098     "Trigger is not active"
2099 };
2100 /* 1 digit (octet 3, bit G) */
2101 static const true_false_string ansi_map_originationtriggers_sixdig_bool_val  = {
2102     "Launch an OriginationRequest for any call attempt with 6 digits",
2103     "Trigger is not active"
2104 };
2105 /* 1 digit (octet 3, bit H) */
2106 static const true_false_string ansi_map_originationtriggers_sevendig_bool_val  = {
2107     "Launch an OriginationRequest for any call attempt with 7 digits",
2108     "Trigger is not active"
2109 };
2110 /* 1 digit (octet 4, bit A) */
2111 static const true_false_string ansi_map_originationtriggers_eightdig_bool_val  = {
2112     "Launch an OriginationRequest for any call attempt with 8 digits",
2113     "Trigger is not active"
2114 };
2115 /* 1 digit (octet 4, bit B) */
2116 static const true_false_string ansi_map_originationtriggers_ninedig_bool_val  = {
2117     "Launch an OriginationRequest for any call attempt with 9 digits",
2118     "Trigger is not active"
2119 };
2120 /* 1 digit (octet 4, bit C) */
2121 static const true_false_string ansi_map_originationtriggers_tendig_bool_val  = {
2122     "Launch an OriginationRequest for any call attempt with 10 digits",
2123     "Trigger is not active"
2124 };
2125 /* 1 digit (octet 4, bit D) */
2126 static const true_false_string ansi_map_originationtriggers_elevendig_bool_val  = {
2127     "Launch an OriginationRequest for any call attempt with 11 digits",
2128     "Trigger is not active"
2129 };
2130 /* 1 digit (octet 4, bit E) */
2131 static const true_false_string ansi_map_originationtriggers_twelvedig_bool_val  = {
2132     "Launch an OriginationRequest for any call attempt with 12 digits",
2133     "Trigger is not active"
2134 };
2135 /* 1 digit (octet 4, bit F) */
2136 static const true_false_string ansi_map_originationtriggers_thirteendig_bool_val  = {
2137     "Launch an OriginationRequest for any call attempt with 13 digits",
2138     "Trigger is not active"
2139 };
2140 /* 1 digit (octet 4, bit G) */
2141 static const true_false_string ansi_map_originationtriggers_fourteendig_bool_val  = {
2142     "Launch an OriginationRequest for any call attempt with 14 digits",
2143     "Trigger is not active"
2144 };
2145 /* 1 digit (octet 4, bit H) */
2146 static const true_false_string ansi_map_originationtriggers_fifteendig_bool_val  = {
2147     "Launch an OriginationRequest for any call attempt with 15 digits",
2148     "Trigger is not active"
2149 };
2150
2151 static void
2152 dissect_ansi_map_originationtriggers(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2153
2154     int offset = 0;
2155     proto_tree *subtree;
2156
2157
2158     subtree = proto_item_add_subtree(actx->created_item, ett_originationtriggers);
2159
2160     /* Revertive Call (RvtC) (octet 1, bit H)*/
2161     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_rvtc, tvb, offset,     1, FALSE);
2162     /* Unrecognized Number (Unrec) (octet 1, bit G) */
2163     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_unrec, tvb, offset,    1, FALSE);
2164     /* World Zone (WZ) (octet 1, bit F) */
2165     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_wz, tvb, offset,       1, FALSE);
2166     /* International (Int'l ) (octet 1, bit E) */
2167     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_int, tvb, offset,      1, FALSE);
2168     /* Inter-LATA Toll (OLATA) (octet 1, bit D) */
2169     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_olata, tvb, offset,    1, FALSE);
2170     /* Intra-LATA Toll (ILATA) (octet 1, bit C) */
2171     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_ilata, tvb, offset,    1, FALSE);
2172     /* Local (octet 1, bit B) */
2173     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_local, tvb, offset,    1, FALSE);
2174     /* All Origination (All) (octet 1, bit A) */
2175     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_all, tvb, offset,      1, FALSE);
2176     offset++;
2177
2178     /*Prior Agreement (PA) (octet 2, bit E) */
2179     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_pa, tvb, offset,       1, FALSE);
2180     /* Double Pound (DP) (octet 2, bit D) */
2181     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_dp, tvb, offset,       1, FALSE);
2182     /* Pound (octet 2, bit C) */
2183     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_pound, tvb, offset,    1, FALSE);
2184     /* Double Star (DS) (octet 2, bit B) */
2185     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_ds, tvb, offset,       1, FALSE);
2186     /* Star (octet 2, bit A) */
2187     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_star, tvb, offset,     1, FALSE);
2188     offset++;
2189
2190     /* 7 digit (octet 3, bit H) */
2191     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_sevendig, tvb, offset, 1, FALSE);
2192     /* 6 digit (octet 3, bit G) */
2193     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_sixdig, tvb, offset,   1, FALSE);
2194     /* 5 digit (octet 3, bit F) */
2195     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_fivedig, tvb, offset,  1, FALSE);
2196     /* 4 digit (octet 3, bit E) */
2197     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_fourdig, tvb, offset,  1, FALSE);
2198     /* 3 digit (octet 3, bit D) */
2199     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_threedig, tvb, offset, 1, FALSE);
2200     /* 2 digit (octet 3, bit C) */
2201     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_twodig, tvb, offset,   1, FALSE);
2202     /* 1 digit (octet 3, bit B) */
2203     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_onedig, tvb, offset,   1, FALSE);
2204     /* No digits (octet 3, bit A) */
2205     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_nodig, tvb, offset,    1, FALSE);
2206     offset++;
2207
2208     /* 15 digit (octet 4, bit H) */
2209     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_fifteendig, tvb, offset,       1, FALSE);
2210     /* 14 digit (octet 4, bit G) */
2211     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_fourteendig, tvb, offset,      1, FALSE);
2212     /* 13 digit (octet 4, bit F) */
2213     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_thirteendig, tvb, offset,      1, FALSE);
2214     /* 12 digit (octet 4, bit E) */
2215     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_twelvedig, tvb, offset,        1, FALSE);
2216     /* 11 digit (octet 4, bit D) */
2217     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_elevendig, tvb, offset,        1, FALSE);
2218     /* 10 digit (octet 4, bit C) */
2219     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_tendig, tvb, offset,   1, FALSE);
2220     /* 9 digit (octet 4, bit B) */
2221     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_ninedig, tvb, offset,  1, FALSE);
2222     /* 8 digits (octet 4, bit A) */
2223     proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_eightdig, tvb, offset, 1, FALSE);
2224
2225 }
2226
2227 /* 6.5.2.91 PACAIndicator */
2228
2229 /* Permanent Activation (PA) (octet 1, bit A) */
2230 static const true_false_string ansi_map_pacaindicator_pa_bool_val  = {
2231     "PACA is permanently activated",
2232     "PACA is not permanently activated"
2233 };
2234
2235 static const value_string ansi_map_PACA_Level_vals[]  = {
2236     {   0, "Not used"},
2237     {   1, "Priority Level. 1 This is the highest level"},
2238     {   2, "Priority Level 2"},
2239     {   3, "Priority Level 3"},
2240     {   4, "Priority Level 4"},
2241     {   5, "Priority Level 5"},
2242     {   6, "Priority Level 6"},
2243     {   7, "Priority Level 7"},
2244     {   8, "Priority Level 8"},
2245     {   8, "Priority Level 9"},
2246     {   10, "Priority Level 10"},
2247     {   11, "Priority Level 11"},
2248     {   12, "Priority Level 12"},
2249     {   13, "Priority Level 13"},
2250     {   14, "Priority Level 14"},
2251     {   15, "Priority Level 15"},
2252     {   0, NULL }
2253 };
2254
2255 static void
2256 dissect_ansi_map_pacaindicator(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2257
2258     int offset = 0;
2259     proto_tree *subtree;
2260
2261
2262     subtree = proto_item_add_subtree(actx->created_item, ett_pacaindicator);
2263     /* PACA Level (octet 1, bits B-E) */
2264     proto_tree_add_item(subtree, hf_ansi_map_PACA_Level, tvb, offset,   1, FALSE);
2265     /* Permanent Activation (PA) (octet 1, bit A) */
2266     proto_tree_add_item(subtree, hf_ansi_map_pacaindicator_pa, tvb, offset,     1, FALSE);
2267 }
2268
2269 /* 6.5.2.92 PageIndicator */
2270 static const value_string ansi_map_PageIndicator_vals[]  = {
2271     {   0, "Not used"},
2272     {   1, "Page"},
2273     {   2, "Listen only"},
2274     {   0, NULL }
2275 };
2276
2277 /* 6.5.2.93 PC_SSN */
2278 static void
2279 dissect_ansi_map_pc_ssn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2280
2281     int offset = 0;
2282     proto_tree *subtree;
2283     guint8 b1,b2,b3,b4;
2284
2285
2286     subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
2287     /* Type (octet 1) */
2288     proto_tree_add_item(subtree, hf_ansi_map_msc_type, tvb, offset, 1, FALSE);
2289     offset++;
2290     /* Point Code Member Number octet 2 */
2291     b1 = tvb_get_guint8(tvb,offset);
2292     offset++;
2293     /* Point Code Cluster Number octet 3 */
2294     b2 = tvb_get_guint8(tvb,offset);
2295     offset++;
2296     /* Point Code Network Number octet 4 */
2297     b3 = tvb_get_guint8(tvb,offset);
2298     offset++;
2299     /* Subsystem Number (SSN) octet 5 */
2300     b4 = tvb_get_guint8(tvb,offset);
2301     proto_tree_add_text(subtree, tvb, offset-3, 4 , "Point Code %u-%u-%u  SSN %u",
2302                         b3, b2, b1, b4);
2303
2304 }
2305 /* 6.5.2.94 PilotBillingID */
2306 static void
2307 dissect_ansi_map_pilotbillingid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2308
2309     int offset = 0;
2310     proto_tree *subtree;
2311
2312
2313     subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
2314     /* First Originating MarketID octet 1 and 2 */
2315     proto_tree_add_item(subtree, hf_ansi_map_MarketID, tvb, offset, 2, FALSE);
2316     offset = offset + 2;
2317     /* First Originating Switch Number octet 3*/
2318     proto_tree_add_item(subtree, hf_ansi_map_swno, tvb, offset, 1, FALSE);
2319     offset++;
2320     /* ID Number */
2321     proto_tree_add_item(subtree, hf_ansi_map_idno, tvb, offset, 3, FALSE);
2322     offset = offset + 3;
2323     proto_tree_add_item(subtree, hf_ansi_map_segcount, tvb, offset, 1, FALSE);
2324
2325 }
2326 /* 6.5.2.96 PreferredLanguageIndicator */
2327 static const value_string ansi_map_PreferredLanguageIndicator_vals[]  = {
2328     {   0, "Unspecified"},
2329     {   1, "English"},
2330     {   2, "French"},
2331     {   3, "Spanish"},
2332     {   4, "German"},
2333     {   5, "Portuguese"},
2334     {   0, NULL }
2335 };
2336
2337 /* 6.5.2.106 ReceivedSignalQuality */
2338 /* a. This octet is encoded the same as octet 1 in the SignalQuality parameter (see
2339    6.5.2.121).
2340 */
2341 /* 6.5.2.118 SetupResult */
2342 static const value_string ansi_map_SetupResult_vals[]  = {
2343     {   0, "Not used"},
2344     {   1, "Unsuccessful"},
2345     {   2, "Successful"},
2346     {   0, NULL }
2347 };
2348 /* 6.5.2.121 SignalQuality */
2349 /* TODO */
2350
2351 /*      6.5.2.122 SMS_AccessDeniedReason (TIA/EIA-41.5-D, page 5-256)
2352         N.S0011-0 v 1.0
2353 */
2354 static const value_string ansi_map_SMS_AccessDeniedReason_vals[]  = {
2355     {   0, "Not used"},
2356     {   1, "Denied"},
2357     {   2, "Postponed"},
2358     {   3, "Unavailable"},
2359     {   4, "Invalid"},
2360     {   0, NULL }
2361 };
2362
2363
2364 /* 6.5.2.125 SMS_CauseCode (TIA/EIA-41.5-D, page 5-262)
2365    N.S0011-0 v 1.0
2366 */
2367 static const value_string ansi_map_SMS_CauseCode_vals[]  = {
2368     {   0, "Address vacant"},
2369     {   1, "Address translation failure"},
2370     {   2, "Network resource shortage"},
2371     {   3, "Network failure"},
2372     {   4, "Invalid Teleservice ID"},
2373     {   5, "Other network problem"},
2374     {   6, "Unsupported network interface"},
2375     {   8, "CDMA handset-based position determination failure"},
2376     {   9, "CDMA handset-based position determination resources released - voice service request"},
2377     {   10, "CDMA handset-based position determination resources released - voice service request - message acknowledged"},
2378     {   11, "Reserved"},
2379     {   12, "Reserved"},
2380     {   13, "Reserved"},
2381     {   14, "Emergency Services Call Precedence"},
2382     {   32, "No page response"},
2383     {   33, "Destination busy"},
2384     {   34, "No acknowledgment"},
2385     {   35, "Destination resource shortage"},
2386     {   36, "SMS delivery postponed"},
2387     {   37, "Destination out of service"},
2388     {   38, "Destination no longer at this address"},
2389     {   39, "Other terminal problem"},
2390     {   64, "Radio interface resource shortage"},
2391     {   65, "Radio interface incompatibility"},
2392     {   66, "Other radio interface problem"},
2393     {   67, "Unsupported Base Station Capability"},
2394     {   96, "Encoding problem"},
2395     {   97, "Service origination denied"},
2396     {   98, "Service termination denied"},
2397     {   99, "Supplementary service not supported"},
2398     {   100, "Service not supported"},
2399     {   101, "Reserved"},
2400     {   102, "Missing expected parameter"},
2401     {   103, "Missing mandatory parameter"},
2402     {   104, "Unrecognized parameter value"},
2403     {   105, "Unexpected parameter value"},
2404     {   106, "User Data size error"},
2405     {   107, "Other general problems"},
2406     {   108, "Session not active"},
2407     {   109, "Reserved"},
2408     {   110, "MS Disconnect"},
2409     {   0, NULL }
2410 };
2411 static value_string_ext ansi_map_SMS_CauseCode_vals_ext = VALUE_STRING_EXT_INIT(ansi_map_SMS_CauseCode_vals);
2412
2413 /* 6.5.2.126 SMS_ChargeIndicator */
2414 /* SMS Charge Indicator (octet 1) */
2415 static const value_string ansi_map_SMS_ChargeIndicator_vals[]  = {
2416     {   0, "Not used"},
2417     {   1, "No charge"},
2418     {   2, "Charge original originator"},
2419     {   3, "Charge original destination"},
2420     {   0, NULL }
2421 };
2422 /*      4 through 63 Reserved. Treat the same as value 1, No charge.
2423         64 through 127 Reserved. Treat the same as value 2, Charge original originator.
2424         128 through 223 Reserved. Treat the same as value 3, Charge original destination.
2425         224 through 255 Reserved for TIA/EIA-41 protocol extension. If unknown, treat the same as value 2, Charge
2426         original originator.
2427 */
2428
2429 /* 6.5.2.130 SMS_NotificationIndicator N.S0005-0 v 1.0*/
2430 static const value_string ansi_map_SMS_NotificationIndicator_vals[]  = {
2431     {   0, "Not used"},
2432     {   1, "Notify when available"},
2433     {   2, "Do not notify when available"},
2434     {   0, NULL }
2435 };
2436
2437 /* 6.5.2.136 SMS_OriginationRestrictions */
2438 /* DEFAULT (octet 1, bits A and B) */
2439
2440 static const value_string ansi_map_SMS_OriginationRestrictions_default_vals[]  = {
2441     {   0, "Block all"},
2442     {   1, "Reserved"},
2443     {   1, "Allow specific"},
2444     {   1, "Allow all"},
2445     {   0, NULL }
2446 };
2447 /* DIRECT (octet 1, bit C) */
2448 static const true_false_string ansi_map_SMS_OriginationRestrictions_direct_bool_val  = {
2449     "Allow Direct",
2450     "Block Direct"
2451 };
2452
2453 /* Force Message Center (FMC) (octet 1, bit D) */
2454 static const true_false_string ansi_map_SMS_OriginationRestrictions_fmc_bool_val  = {
2455     "Force Indirect",
2456     "No effect"
2457 };
2458
2459 static void
2460 dissect_ansi_map_sms_originationrestrictions(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2461
2462     int offset = 0;
2463     proto_tree *subtree;
2464
2465
2466     subtree = proto_item_add_subtree(actx->created_item, ett_sms_originationrestrictions);
2467     proto_tree_add_item(subtree, hf_ansi_map_reservedBitHGFE, tvb, offset, 1, FALSE);
2468     proto_tree_add_item(subtree, hf_ansi_map_sms_originationrestrictions_fmc, tvb, offset, 1, FALSE);
2469     proto_tree_add_item(subtree, hf_ansi_map_sms_originationrestrictions_direct, tvb, offset, 1, FALSE);
2470     proto_tree_add_item(subtree, hf_ansi_map_sms_originationrestrictions_default, tvb, offset, 1, FALSE);
2471
2472 }
2473
2474 /* 6.5.2.137 SMS_TeleserviceIdentifier */
2475 /* Updated with N.S0011-0 v 1.0 */
2476
2477 /* SMS Teleservice Identifier (octets 1 and 2) */
2478 static const value_string ansi_map_SMS_TeleserviceIdentifier_vals[]  = {
2479     {     0, "Not used"},
2480     {     1, "Reserved for maintenance"},
2481     {     2, "SSD Update no response"},
2482     {     3, "SSD Update successful"},
2483     {     4, "SSD Update failed"},
2484     {  4096, "AMPS Extended Protocol Enhanced Services" },
2485     {  4097, "CDMA Cellular Paging Teleservice" },
2486     {  4098, "CDMA Cellular Messaging Teleservice" },
2487     {  4099, "CDMA Voice Mail Notification" },
2488     { 32513, "TDMA Cellular Messaging Teleservice" },
2489     { 32520, "TDMA System Assisted Mobile Positioning through Satellite (SAMPS)" },
2490     { 32584, "TDMA Segmented System Assisted Mobile Positioning Service" },
2491     {     0, NULL }
2492 };
2493 /* 6.5.2.140 SPINITriggers */
2494 /* All Origination (All) (octet 1, bit A) */
2495
2496 /* 6.5.2.142 SSDUpdateReport */
2497 static const value_string ansi_map_SSDUpdateReport_vals[]  = {
2498     {       0, "Not used"},
2499     {    4096, "AMPS Extended Protocol Enhanced Services"},
2500     {    4097, "CDMA Cellular Paging Teleservice"},
2501     {    4098, "CDMA Cellular Messaging Teleservice"},
2502     {   32513, "TDMA Cellular Messaging Teleservice"},
2503     {   32514, "TDMA Cellular Paging Teleservice (CPT-136)"},
2504     {   32515, "TDMA Over-the-Air Activation Teleservice (OATS)"},
2505     {   32516, "TDMA Over-the-Air Programming Teleservice (OPTS)"},
2506     {   32517, "TDMA General UDP Transport Service (GUTS)"},
2507     {   32576, "Reserved"},
2508     {   32577, "TDMA Segmented Cellular MessagingTeleservice"},
2509     {   32578, "TDMA Segmented Cellular Paging Teleservice"},
2510     {   32579, "TDMA Segmented Over-the-Air Activation Teleservice (OATS)"},
2511     {   32580, "TDMA Segmented Over-the-Air Programming Teleservice (OPTS)."},
2512     {   32581, "TDMA Segmented General UDP Transport Service (GUTS)"},
2513     {   32576, "Reserved"},
2514     {       0, NULL }
2515 };
2516
2517 /* 6.5.2.143 StationClassMark */
2518
2519 /* 6.5.2.144 SystemAccessData */
2520
2521 /* 6.5.2.146 SystemCapabilities */
2522 /* Updated in N.S0008-0 v 1.0 */
2523 static const true_false_string ansi_map_systemcapabilities_auth_bool_val  = {
2524     "Authentication parameters were requested on this system access (AUTH=1 in the OMT)",
2525     "Authentication parameters were not requested on this system access (AUTH=0 in the OMT)."
2526 };
2527
2528 static const true_false_string ansi_map_systemcapabilities_se_bool_val  = {
2529     "Signaling Message Encryption supported by the system",
2530     "Signaling Message Encryption not supported by the system"
2531 };
2532
2533 static const true_false_string ansi_map_systemcapabilities_vp_bool_val  = {
2534     "Voice Privacy supported by the system",
2535     "Voice Privacy not supported by the system"
2536 };
2537
2538 static const true_false_string ansi_map_systemcapabilities_cave_bool_val  = {
2539     "System can execute the CAVE algorithm and share SSD for the indicated MS",
2540     "System cannot execute the CAVE algorithm and cannot share SSD for the indicated MS"
2541 };
2542
2543 static const true_false_string ansi_map_systemcapabilities_ssd_bool_val  = {
2544     "SSD is shared with the system for the indicated MS",
2545     "SSD is not shared with the system for the indicated MS"
2546 };
2547
2548 static const true_false_string ansi_map_systemcapabilities_dp_bool_val  = {
2549     "DP is supported by the system",
2550     "DP is not supported by the system"
2551 };
2552
2553 static void
2554 dissect_ansi_map_systemcapabilities(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2555
2556     int offset = 0;
2557     proto_tree *subtree;
2558
2559
2560     subtree = proto_item_add_subtree(actx->created_item, ett_systemcapabilities);
2561     proto_tree_add_item(subtree, hf_ansi_map_reservedBitHG, tvb, offset, 1, FALSE);
2562     proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_dp, tvb, offset, 1, FALSE);
2563     proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_ssd, tvb, offset, 1, FALSE);
2564     proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_cave, tvb, offset, 1, FALSE);
2565     proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_vp, tvb, offset, 1, FALSE);
2566     proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_se, tvb, offset, 1, FALSE);
2567     proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_auth, tvb, offset, 1, FALSE);
2568 }
2569
2570 /* 6.5.2.151 TDMABurstIndicator */
2571 /* 6.5.2.152 TDMACallMode */
2572 /* 6.5.2.153 TDMAChannelData Updated in N.S0007-0 v 1.0*/
2573
2574 /* 6.5.2.155 TerminationAccessType */
2575 /* XXX Fix Me, Fill up the values or do special decoding? */
2576 static const value_string ansi_map_TerminationAccessType_vals[]  = {
2577     {   0, "Not used"},
2578     {   1, "Reserved for controlling system assignment (may be a trunk group identifier)."},
2579     /* 1 through  127 */
2580     { 127, "Reserved for controlling system assignment (may be a trunk group identifier)."},
2581     { 128, "Reserved for TIA/EIA-41 protocol extension. If unknown, treat the same as value 253, Land-to-Mobile Directory Number access"},
2582     /* 128 through  160 */
2583     { 160, "Reserved for TIA/EIA-41 protocol extension. If unknown, treat the same as value 253, Land-to-Mobile Directory Number access"},
2584     { 161, "Reserved for this Standard"},
2585     /* 161 through  251 */
2586     { 151, "Reserved for this Standard"},
2587     { 252, "Mobile-to-Mobile Directory Number access"},
2588     { 253, "Land-to-Mobile Directory Number access"},
2589     { 254, "Remote Feature Control port access"},
2590     { 255, "Roamer port access"},
2591     {   0, NULL }
2592 };
2593
2594 /* 6.5.2.158 TerminationTreatment */
2595 static const value_string ansi_map_TerminationTreatment_vals[]  = {
2596     {   0, "Not used"},
2597     {   1, "MS Termination"},
2598     {   2, "Voice Mail Storage"},
2599     {   3, "Voice Mail Retrieval"},
2600     {   4, "Dialogue Termination"},
2601     {   0, NULL }
2602 };
2603
2604 /* 6.5.2.159 TerminationTriggers */
2605 /* Busy (octet 1, bits A and B) */
2606 static const value_string ansi_map_terminationtriggers_busy_vals[]  = {
2607     {   0, "Busy Call"},
2608     {   1, "Busy Trigger"},
2609     {   2, "Busy Leg"},
2610     {   3, "Reserved. Treat as an unrecognized parameter value"},
2611     {   0, NULL }
2612 };
2613 /* Routing Failure (RF) (octet 1, bits C and D) */
2614 static const value_string ansi_map_terminationtriggers_rf_vals[]  = {
2615     {   0, "Failed Call"},
2616     {   1, "Routing Failure Trigger"},
2617     {   2, "Failed Leg"},
2618     {   3, "Reserved. Treat as an unrecognized parameter value"},
2619     {   0, NULL }
2620 };
2621 /* No Page Response (NPR) (octet 1, bits E and F) */
2622 static const value_string ansi_map_terminationtriggers_npr_vals[]  = {
2623     {   0, "No Page Response Call"},
2624     {   1, "No Page Response Trigger"},
2625     {   2, "No Page Response Leg"},
2626     {   3, "Reserved. Treat as an unrecognized parameter value"},
2627     {   0, NULL }
2628 };
2629 /* No Answer (NA) (octet 1, bits G and H) */
2630 static const value_string ansi_map_terminationtriggers_na_vals[]  = {
2631     {   0, "No Answer Call"},
2632     {   1, "No Answer Trigger"},
2633     {   2, "No Answer Leg"},
2634     {   3, "Reserved"},
2635     {   0, NULL }
2636 };
2637 /* None Reachable (NR) (octet 2, bit A) */
2638 static const value_string ansi_map_terminationtriggers_nr_vals[]  = {
2639     {   0, "Member Not Reachable"},
2640     {   1, "Group Not Reachable"},
2641     {   0, NULL }
2642 };
2643
2644 /* 6.5.2.159 TerminationTriggers N.S0005-0 v 1.0*/
2645 static void
2646 dissect_ansi_map_terminationtriggers(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2647
2648     int offset = 0;
2649     proto_tree *subtree;
2650
2651
2652     subtree = proto_item_add_subtree(actx->created_item, ett_transactioncapability);
2653
2654     proto_tree_add_item(subtree, hf_ansi_map_reservedBitH, tvb, offset, 1, FALSE);
2655     /* No Page Response (NPR) (octet 1, bits E and F) */
2656     proto_tree_add_item(subtree, hf_ansi_map_terminationtriggers_npr, tvb, offset, 1, FALSE);
2657     /* No Answer (NA) (octet 1, bits G and H) */
2658     proto_tree_add_item(subtree, hf_ansi_map_terminationtriggers_na, tvb, offset, 1, FALSE);
2659     /* Routing Failure (RF) (octet 1, bits C and D) */
2660     proto_tree_add_item(subtree, hf_ansi_map_terminationtriggers_rf, tvb, offset, 1, FALSE);
2661     /* Busy (octet 1, bits A and B) */
2662     proto_tree_add_item(subtree, hf_ansi_map_terminationtriggers_busy, tvb, offset, 1, FALSE);
2663     offset++;
2664
2665     /* None Reachable (NR) (octet 2, bit A) */
2666     proto_tree_add_item(subtree, hf_ansi_map_terminationtriggers_nr, tvb, offset, 1, FALSE);
2667 }
2668
2669 /* 6.5.2.160 TransactionCapability (TIA/EIA-41.5-D, page 5-315) */
2670 /* Updated with N.S0010-0 v 1.0, N.S0012-0 v 1.0 N.S0013-0 v 1.0 */
2671 static const true_false_string ansi_map_trans_cap_prof_bool_val  = {
2672     "The system is capable of supporting the IS-41-C profile parameters",
2673     "The system is not capable of supporting the IS-41-C profile parameters"
2674 };
2675
2676 static const true_false_string ansi_map_trans_cap_busy_bool_val  = {
2677     "The system is capable of detecting a busy condition at the current time",
2678     "The system is not capable of detecting a busy condition at the current time"
2679 };
2680
2681 static const true_false_string ansi_map_trans_cap_ann_bool_val  = {
2682     "The system is capable of honoring the AnnouncementList parameter at the current time",
2683     "The system is not capable of honoring the AnnouncementList parameter at the current time"
2684 };
2685
2686 static const true_false_string ansi_map_trans_cap_rui_bool_val  = {
2687     "The system is capable of interacting with the user",
2688     "The system is not capable of interacting with the user"
2689 };
2690
2691 static const true_false_string ansi_map_trans_cap_spini_bool_val  = {
2692     "The system is capable of supporting local SPINI operation",
2693     "The system is not capable of supporting local SPINI operation at the current time"
2694 };
2695
2696 static const true_false_string ansi_map_trans_cap_uzci_bool_val  = {
2697     "The system is User Zone capable at the current time",
2698     "The system is not User Zone capable at the current time"
2699 };
2700 static const true_false_string ansi_map_trans_cap_ndss_bool_val  = {
2701     "Serving system is NDSS capable",
2702     "Serving system is not NDSS capable"
2703 };
2704 static const true_false_string ansi_map_trans_cap_nami_bool_val  = {
2705     "The system is CNAP/CNAR capable",
2706     "The system is not CNAP/CNAR capable"
2707 };
2708
2709 static const value_string ansi_map_trans_cap_multerm_vals[]  = {
2710     {   0, "The system cannot accept a termination at this time (i.e., cannot accept routing information)"},
2711     {   1, "The system supports the number of call legs indicated"},
2712     {   2, "The system supports the number of call legs indicated"},
2713     {   3, "The system supports the number of call legs indicated"},
2714     {   4, "The system supports the number of call legs indicated"},
2715     {   5, "The system supports the number of call legs indicated"},
2716     {   6, "The system supports the number of call legs indicated"},
2717     {   7, "The system supports the number of call legs indicated"},
2718     {   8, "The system supports the number of call legs indicated"},
2719     {   9, "The system supports the number of call legs indicated"},
2720     {   10, "The system supports the number of call legs indicated"},
2721     {   11, "The system supports the number of call legs indicated"},
2722     {   12, "The system supports the number of call legs indicated"},
2723     {   13, "The system supports the number of call legs indicated"},
2724     {   14, "The system supports the number of call legs indicated"},
2725     {   15, "The system supports the number of call legs indicated"},
2726     {   0, NULL }
2727 };
2728
2729 static const true_false_string ansi_map_trans_cap_tl_bool_val  = {
2730     "The system is capable of supporting the TerminationList parameter at the current time",
2731     "The system is not capable of supporting the TerminationList parameter at the current time"
2732 };
2733
2734 static const true_false_string ansi_map_trans_cap_waddr_bool_val  = {
2735     "The system is capable of supporting the TriggerAddressList parameter",
2736     "The system is not capable of supporting the TriggerAddressList parameter"
2737 };
2738
2739
2740 static void
2741 dissect_ansi_map_transactioncapability(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2742
2743     int offset = 0;
2744     proto_tree *subtree;
2745
2746
2747     subtree = proto_item_add_subtree(actx->created_item, ett_transactioncapability);
2748
2749     /*NAME Capability Indicator (NAMI) (octet 1, bit H) */
2750     proto_tree_add_item(subtree, hf_ansi_map_trans_cap_nami, tvb, offset, 1, FALSE);
2751     /* NDSS Capability (NDSS) (octet 1, bit G) */
2752     proto_tree_add_item(subtree, hf_ansi_map_trans_cap_ndss, tvb, offset, 1, FALSE);
2753     /* UZ Capability Indicator (UZCI) (octet 1, bit F) */
2754     proto_tree_add_item(subtree, hf_ansi_map_trans_cap_uzci, tvb, offset, 1, FALSE);
2755     /* Subscriber PIN Intercept (SPINI) (octet 1, bit E) */
2756     proto_tree_add_item(subtree, hf_ansi_map_trans_cap_spini, tvb, offset, 1, FALSE);
2757     /* Remote User Interaction (RUI) (octet 1, bit D) */
2758     proto_tree_add_item(subtree, hf_ansi_map_trans_cap_rui, tvb, offset, 1, FALSE);
2759     /* Announcements (ANN) (octet 1, bit C) */
2760     proto_tree_add_item(subtree, hf_ansi_map_trans_cap_ann, tvb, offset, 1, FALSE);
2761     /* Busy Detection (BUSY) (octet 1, bit B) */
2762     proto_tree_add_item(subtree, hf_ansi_map_trans_cap_busy, tvb, offset, 1, FALSE);
2763     /* Profile (PROF) (octet 1, bit A) */
2764     proto_tree_add_item(subtree, hf_ansi_map_trans_cap_prof, tvb, offset, 1, FALSE);
2765     offset++;
2766
2767     /* WIN Addressing (WADDR) (octet 2, bit F) */
2768     proto_tree_add_item(subtree, hf_ansi_trans_cap_waddr, tvb, offset, 1, FALSE);
2769     /* TerminationList (TL) (octet 2, bit E) */
2770     proto_tree_add_item(subtree, hf_ansi_trans_cap_tl, tvb, offset, 1, FALSE);
2771     /* Multiple Terminations (octet 2, bits A-D) */
2772     proto_tree_add_item(subtree, hf_ansi_trans_cap_multerm, tvb, offset, 1, FALSE);
2773 }
2774
2775 /* 6.5.2.162 UniqueChallengeReport */
2776 /* Unique Challenge Report (octet 1) */
2777 static const value_string ansi_map_UniqueChallengeReport_vals[]  = {
2778     {   0, "Not used"},
2779     {   1, "Unique Challenge not attempted"},
2780     {   2, "Unique Challenge no response"},
2781     {   3, "Unique Challenge successful"},
2782     {   4, "Unique Challenge failed"},
2783     {   0, NULL }
2784 };
2785
2786 /* 6.5.2.166 VoicePrivacyMask */
2787
2788
2789 /* 6.5.2.e (TSB76) CDMAServiceConfigurationRecord N.S0008-0 v 1.0 */
2790 /* a. This field carries the CDMA Service Configuration Record. The bit-layout is the
2791    same as that of Service Configuration Record in TSB74, and J-STD-008.
2792 */
2793
2794 /* 6.5.2.f CDMAServiceOption N.S0010-0 v 1.0 */
2795
2796 /* values copied from old ANSI map dissector */
2797 static const range_string cdmaserviceoption_vals[] = {
2798     { 1, 1, "Basic Variable Rate Voice Service (8 kbps)" },
2799     { 2, 2, "Mobile Station Loopback (8 kbps)" },
2800     { 3, 3, "Enhanced Variable Rate Voice Service (8 kbps)" },
2801     { 4, 4, "Asynchronous Data Service (9.6 kbps)" },
2802     { 5, 5, "Group 3 Facsimile (9.6 kbps)" },
2803     { 6, 6, "Short Message Services (Rate Set 1)" },
2804     { 7, 7, "Packet Data Service: Internet or ISO Protocol Stack (9.6 kbps)" },
2805     { 8, 8, "Packet Data Service: CDPD Protocol Stack (9.6 kbps)" },
2806     { 9, 9, "Mobile Station Loopback (13 kbps)" },
2807     { 10, 10, "STU-III Transparent Service" },
2808     { 11, 11, "STU-III Non-Transparent Service" },
2809     { 12, 12, "Asynchronous Data Service (14.4 or 9.6 kbps)" },
2810     { 13, 13, "Group 3 Facsimile (14.4 or 9.6 kbps)" },
2811     { 14, 14, "Short Message Services (Rate Set 2)" },
2812     { 15, 15, "Packet Data Service: Internet or ISO Protocol Stack (14.4 kbps)" },
2813     { 16, 16, "Packet Data Service: CDPD Protocol Stack (14.4 kbps)" },
2814     { 17, 17, "High Rate Voice Service (13 kbps)" },
2815     { 18, 18, "Over-the-Air Parameter Administration (Rate Set 1)" },
2816     { 19, 19, "Over-the-Air Parameter Administration (Rate Set 2)" },
2817     { 20, 20, "Group 3 Analog Facsimile (Rate Set 1)" },
2818     { 21, 21, "Group 3 Analog Facsimile (Rate Set 2)" },
2819     { 22, 22, "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS1 forward, RS1 reverse)" },
2820     { 23, 23, "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS1 forward, RS2 reverse)" },
2821     { 24, 24, "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS2 forward, RS1 reverse)" },
2822     { 25, 25, "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS2 forward, RS2 reverse)" },
2823     { 26, 26, "High Speed Packet Data Service: CDPD Protocol Stack (RS1 forward, RS1 reverse)" },
2824     { 27, 27, "High Speed Packet Data Service: CDPD Protocol Stack (RS1 forward, RS2 reverse)" },
2825     { 28, 28, "High Speed Packet Data Service: CDPD Protocol Stack (RS2 forward, RS1 reverse)" },
2826     { 29, 29, "High Speed Packet Data Service: CDPD Protocol Stack (RS2 forward, RS2 reverse)" },
2827     { 30, 30, "Supplemental Channel Loopback Test for Rate Set 1" },
2828     { 31, 31, "Supplemental Channel Loopback Test for Rate Set 2" },
2829     { 32, 32, "Test Data Service Option (TDSO)" },
2830     { 33, 33, "cdma2000 High Speed Packet Data Service, Internet or ISO Protocol Stack" },
2831     { 34, 34, "cdma2000 High Speed Packet Data Service, CDPD Protocol Stack" },
2832     { 35, 35, "Location Services, Rate Set 1 (9.6 kbps)" },
2833     { 36, 36, "Location Services, Rate Set 2 (14.4 kbps)" },
2834     { 37, 37, "ISDN Interworking Service (64 kbps)" },
2835     { 38, 38, "GSM Voice" },
2836     { 39, 39, "GSM Circuit Data" },
2837     { 40, 40, "GSM Packet Data" },
2838     { 41, 41, "GSM Short Message Service" },
2839     { 42, 42, "None Reserved for MC-MAP standard service options" },
2840     { 54, 54, "Markov Service Option (MSO)" },
2841     { 55, 55, "Loopback Service Option (LSO)" },
2842     { 56, 56, "Selectable Mode Vocoder" },
2843     { 57, 57, "32 kbps Circuit Video Conferencing" },
2844     { 58, 58, "64 kbps Circuit Video Conferencing" },
2845     { 59, 59, "HRPD Accounting Records Identifier" },
2846     { 60, 60, "Link Layer Assisted Robust Header Compression (LLA ROHC) - Header Removal" },
2847     { 61, 61, "Link Layer Assisted Robust Header Compression (LLA ROHC) - Header Compression" },
2848     { 62, 62, "Source-Controlled Variable-Rate Multimode Wideband Speech Codec (VMR-WB) Rate Set 2" },
2849     { 63, 63, "Source-Controlled Variable-Rate Multimode Wideband Speech Codec (VMR-WB) Rate Set 1" },
2850     { 64, 64, "HRPD auxiliary Packet Data Service instance" },
2851     { 65, 65, "cdma2000/GPRS Inter-working" },
2852     { 66, 66, "cdma2000 High Speed Packet Data Service, Internet or ISO Protocol Stack" },
2853     { 67, 67, "HRPD Packet Data IP Service where Higher Layer Protocol is IP or ROHC" },
2854     { 68, 68, "Enhanced Variable Rate Voice Service (EVRC-B)" },
2855     { 69, 69, "HRPD Packet Data Service, which when used in paging over the 1x air interface, a page response is required" },
2856     { 70, 70, "Enhanced Variable Rate Voice Service (EVRC-WB)" },
2857     { 71, 4099, "None Reserved for standard service options" },
2858     { 4100, 4100, "Asynchronous Data Service, Revision 1 (9.6 or 14.4 kbps)" },
2859     { 4101, 4101, "Group 3 Facsimile, Revision 1 (9.6 or 14.4 kbps)" },
2860     { 4102, 4102, "Reserved for standard service option" },
2861     { 4103, 4103, "Packet Data Service: Internet or ISO Protocol Stack, Revision 1 (9.6 or 14.4 kbps)" },
2862     { 4104, 4104, "Packet Data Service: CDPD Protocol Stack, Revision 1 (9.6 or 14.4 kbps)" },
2863     { 4105, 32767, "Reserved for standard service options" },
2864     { 32768, 32768, "QCELP (13 kbps)" },
2865     { 32769, 32771, "Proprietary QUALCOMM Incorporated" },
2866     { 32772, 32775, "Proprietary OKI Telecom" },
2867     { 32776, 32779, "Proprietary Lucent Technologies" },
2868     { 32780, 32783, "Nokia" },
2869     { 32784, 32787, "NORTEL NETWORKS" },
2870     { 32788, 32791, "Sony Electronics Inc" },
2871     { 32792, 32795, "Motorola" },
2872     { 32796, 32799, "QUALCOMM Incorporated" },
2873     { 32800, 32803, "QUALCOMM Incorporated" },
2874     { 32804, 32807, "QUALCOMM Incorporated" },
2875     { 32808, 32811, "QUALCOMM Incorporated" },
2876     { 32812, 32815, "Lucent Technologies" },
2877     { 32816, 32819, "Denso International" },
2878     { 32820, 32823, "Motorola" },
2879     { 32824, 32827, "Denso International" },
2880     { 32828, 32831, "Denso International" },
2881     { 32832, 32835, "Denso International" },
2882     { 32836, 32839, "NEC America" },
2883     { 32840, 32843, "Samsung Electronics" },
2884     { 32844, 32847, "Texas Instruments Incorporated" },
2885     { 32848, 32851, "Toshiba Corporation" },
2886     { 32852, 32855, "LG Electronics Inc." },
2887     { 32856, 32859, "VIA Telecom Inc." },
2888     { 0,           0,          NULL                   }
2889 };
2890
2891 static void
2892 dissect_ansi_map_cdmaserviceoption(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2893     int offset = 0;
2894     proto_tree *subtree;
2895
2896
2897     subtree = proto_item_add_subtree(actx->created_item, ett_cdmaserviceoption);
2898
2899     proto_tree_add_item(subtree, hf_ansi_map_cdmaserviceoption, tvb, offset, 2, FALSE);
2900
2901
2902 }
2903 /* 6.5.2.f (TSB76) CDMAServiceOption N.S0008-0 v 1.0*/
2904 /* This field carries the CDMA Service Option. The bit-layout is the same as that of
2905    Service Option in TSB74 and J-STD-008.*/
2906
2907 /* 6.5.2.i (IS-730) TDMAServiceCode N.S0008-0 v 1.0 */
2908 static const value_string ansi_map_TDMAServiceCode_vals[]  = {
2909     {   0, "Analog Speech Only"},
2910     {   1, "Digital Speech Only"},
2911     {   2, "Analog or Digital Speech, Analog Preferred"},
2912     {   3, "Analog or Digital Speech, Digital Preferred"},
2913     {   4, "Asynchronous Data"},
2914     {   5, "G3 Fax"},
2915     {   6, "Not Used (Service Rejected)"},
2916     {   7, "STU-III"},
2917     {   0, NULL }
2918 };
2919 /* 6.5.2.j (IS-730) TDMATerminalCapability N.S0008-0 v 1.0 Updted with N.S0015-0 */
2920 /* Supported Frequency Band (octet 1) */
2921 /* Voice Coder (octet 2) */
2922 /* Protocol Version (octet 3) N.S0015-0 */
2923 static const value_string ansi_map_TDMATerminalCapability_prot_ver_vals[]  = {
2924     {   0, "EIA-553 or IS-54-A"},
2925     {   1, "TIA/EIA-627.(IS-54-B)"},
2926     {   2, "IS-136"},
2927     {   3, "Permanently Reserved (ANSI J-STD-011).Treat the same as value 4, IS-136-A."},
2928     {   4, "PV 0 as published in TIA/EIA-136-0 and IS-136-A."},
2929     {   5, "PV 1 as published in TIA/EIA-136-A."},
2930     {   6, "PV 2 as published in TIA/EIA-136-A."},
2931     {   7, "PV 3 as published in TIA/EIA-136-A."},
2932     {   0, NULL }
2933 };
2934 /* Asynchronous Data (ADS) (octet 4, bit A) N.S0007-0*/
2935 /* Group 3 Fax (G3FAX) (octet 4, bit B) */
2936 /* Secure Telephone Unit III (STU3) (octet 4, bit C) */
2937 /* Analog Voice (AVOX) (octet 4, bit D) */
2938 /* Half Rate (HRATE) (octet 4, bit E) */
2939 /* Full Rate (FRATE) (octet 4, bit F) */
2940 /* Double Rate (2RATE) (octet 4, bit G) */
2941 /* Triple Rate (3RATE) (octet 4, bit H) */
2942
2943
2944 /* 6.5.2.k (IS-730)) TDMAVoiceCoder N.S0008-0 v 1.0, N.S0007-0 */
2945 /* VoiceCoder (octet 1) */
2946
2947 /* 6.5.2.p UserZoneData N.S0015-0 */
2948
2949 /* 6.5.2.aa BaseStationManufacturerCode N.S0007-0 v 1.0 */
2950 /* The BaseStationManufacturerCode (BSMC) parameter specifies the manufacturer of the
2951    base station that is currently serving the MS (see IS-136 for enumeration of values).*/
2952
2953 /* 6.5.2.ab BSMCStatus */
2954
2955 /* BSMC Status (octet 1) */
2956 static const value_string ansi_map_BSMCStatus_vals[]  = {
2957     {   0, "Same BSMC Value shall not be supported"},
2958     {   1, "Same BSMC Value shall be supported"},
2959     {   0, NULL }
2960 };
2961
2962 /*- 6.5.2.ac ControlChannelMode (N.S0007-0 v 1.0)*/
2963 static const value_string ansi_map_ControlChannelMode_vals[]  = {
2964     {   0, "Unknown"},
2965     {   1, "MS is in Analog CC Mode"},
2966     {   2, "MS is in Digital CC Mode"},
2967     {   3, "MS is in NAMPS CC Mode"},
2968     {   0, NULL }
2969 };
2970
2971 /* 6.5.2.ad NonPublicData N.S0007-0 v 1.0*/
2972 /* NP Only Service (NPOS) (octet 1, bits A and B) */
2973 /* Charging Area Tone Service (CATS) (octet 1, bits C - F) */
2974 /* PSID/RSID Download Order (PRDO) (octet 1, bits G and H) */
2975
2976 /* 6.5.2.ae PagingFrameClass N.S0007-0 v 1.0*/
2977 /* Paging Frame Class (octet 1) */
2978
2979 static const value_string ansi_map_PagingFrameClass_vals[]  = {
2980     {   0, "PagingFrameClass 1 (1.28 seconds)"},
2981     {   1, "PagingFrameClass 2 (2.56 seconds)"},
2982     {   2, "PagingFrameClass 3 (3.84 seconds)"},
2983     {   3, "PagingFrameClass 4 (7.68 seconds)"},
2984     {   4, "PagingFrameClass 5 (15.36 seconds)"},
2985     {   5, "PagingFrameClass 6 (30.72 seconds)"},
2986     {   6, "PagingFrameClass 7 (61.44 seconds)"},
2987     {   7, "PagingFrameClass 8 (122.88 seconds)"},
2988     {   8, "Reserved. Treat the same as value 0, PagingFrameClass 1"},
2989     {   0, NULL }
2990 };
2991
2992 /* 6.5.2.af PSID_RSIDInformation N.S0007-0 v 1.0*/
2993 /* PSID/RSID Indicator (octet 1, bit A) */
2994 /* PSID/RSID Type (octet 1, bits B-D) */
2995
2996 /* 6.5.2.ah ServicesResult N.S0007-0 v 1.0*/
2997 /* PSID/RSID Download Result (PRDR) (octet 1, bits A and B) */
2998 static const value_string ansi_map_ServicesResult_ppr_vals[]  = {
2999     {   0, "No Indication"},
3000     {   1, "Unsuccessful PSID/RSID download"},
3001     {   2, "Successful PSID/RSID download"},
3002     {   3, "Reserved. Treat the same as value 0, No Indication"},
3003     {   0, NULL }
3004 };
3005
3006 /* 6.5.2.ai SOCStatus N.S0007-0 v 1.0*/
3007
3008 /* SOC Status (octet 1) */
3009 static const value_string ansi_map_SOCStatus_vals[]  = {
3010     {   0, "Same SOC Value shall not be supported"},
3011     {   1, "Same SOC Value shall be supported"},
3012     {   0, NULL }
3013 };
3014
3015 /* 6.5.2.aj SystemOperatorCode N.S0007-0 v 1.0*/
3016 /* The SystemOperatorCode (SOC) parameter specifies the system operator that is currently
3017    providing service to a MS (see IS-136 for enumeration of values) */
3018
3019 /* 6.5.2.al UserGroup N.S0007-0 v 1.0*/
3020
3021 /* 6.5.2.am UserZoneData N.S0007-0 v 1.0*/
3022
3023
3024 /*Table 6.5.2.ay TDMABandwidth value N.S0008-0 v 1.0 */
3025 static const value_string ansi_map_TDMABandwidth_vals[]  = {
3026     {   0, "Half-Rate Digital Traffic Channel Only"},
3027     {   1, "Full-Rate Digital Traffic Channel Only"},
3028     {   2, "Half-Rate or Full-rate Digital Traffic Channel - Full-Rate Preferred"},
3029     {   3, "Half-rate or Full-rate Digital Traffic Channel - Half-rate Preferred"},
3030     {   4, "Double Full-Rate Digital Traffic Channel Only"},
3031     {   5, "Triple Full-Rate Digital Traffic Channel Only"},
3032     {   6, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3033     {   7, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3034     {   8, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3035     {   9, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3036     {   10, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3037     {   11, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3038     {   12, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3039     {   13, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3040     {   14, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3041     {   15, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3042     {   0, NULL }
3043
3044 };
3045
3046 /* 6.5.2.az TDMADataFeaturesIndicator N.S0008-0 v 1.0 */
3047 /* TDMADataFeaturesIndicator
3048    ansi_map_FeatureActivity_vals
3049
3050    ADS FeatureActivity ADS-FA ( octet 1 bit A and B )
3051    G3 Fax FeatureActivity G3FAX-FA ( octet 1 bit C and D )
3052    STU-III FeatureActivity STUIII-FA ( octet 1 bit E and F )
3053    Half Rate data FeatureActivity HRATE-FA ( octet 2 bit A and B )
3054    Full Rate data FeatureActivity FRATE-FA ( octet 2 bit C and D )
3055    Double Rate data FeatureActivity 2RATE-FA ( octet 2 bit E and F )
3056    Triple Rate data FeatureActivity 3RATE-FA ( octet g bit G and H )
3057
3058    Table 6.5.2.azt TDMADataFeaturesIndicator value
3059    static const value_string ansi_map_TDMADataFeaturesIndicator_vals[]  = {
3060    {   0, "Not Used"},
3061    {   1, "Not Authorized"},
3062    {   2, "Authorized, but de-activated"},
3063    {   3, "Authorized and activated"},
3064    {   0, NULL }
3065
3066    };
3067 */
3068
3069 /* 6.5.2.ba TDMADataMode N.S0008-0 v 1.0*/
3070
3071 /* 6.5.2.bb TDMAVoiceMode */
3072
3073 /* 6.5.2.bb CDMAConnectionReference N.S0008-0 v 1.0 */
3074 /* Service Option Connection Reference Octet 1 */
3075 /*      a. This field carries the CDMA Service Option Connection Reference. The bitlayout
3076         is the same as that of Service Option Connection Reference in TSB74 and
3077         J-STD-008.
3078 */
3079
3080 /* 6.5.2.ad CDMAState N.S0008-0 v 1.0 */
3081 /* Service Option State Octet 1 */
3082 /* a. This field carries the CDMA Service Option State information. The CDMA
3083    Service Option State is defined in the current CDMA Service Options standard.
3084    If CDMA Service Option State is not explicitly defined within a section of the
3085    relevant CDMA Service Option standard, the CDMA Service Option State shall
3086    carry the value of the ORD_Q octet of all current Service Option Control Orders
3087    (see IS-95), or the contents of all current CDMA Service Option Control
3088    Messages (see TSB74) type specific field for this connection reference. */
3089
3090 /* 6.5.2.aj SecondInterMSCCircuitID */
3091 /* -- XXX Same code as ISLPinformation???
3092    dissect_ansi_map_secondintermsccircuitid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){
3093
3094    int offset = 0;
3095
3096    proto_tree *subtree;
3097
3098
3099    subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
3100    / Trunk Group Number (G) Octet 1 /
3101    proto_tree_add_item(subtree, hf_ansi_map_tgn, tvb, offset, 1, FALSE);
3102    offset++;
3103    / Trunk Member Number (M) Octet2 /
3104    proto_tree_add_item(subtree, hf_ansi_map_tmn, tvb, offset, 1, FALSE);
3105    }
3106 */
3107 /* 6.5.2.as ChangeServiceAttributes N.S0008-0 v 1.0 */
3108 /* Change Facilities Flag (CHGFAC)(octet 1, bits A - B) */
3109 static const value_string ansi_map_ChangeServiceAttributes_chgfac_vals[]  = {
3110     {   0, "Change Facilities Operation Requested"},
3111     {   1, "Change Facilities Operation Not Requested"},
3112     {   2, "Change Facilities Operation Used"},
3113     {   3, "Change Facilities Operation Not Used"},
3114     {   0, NULL }
3115 };
3116 /* Service Negotiate Flag (SRVNEG)(octet 1, bits C - D) */
3117 static const value_string ansi_map_ChangeServiceAttributes_srvneg_vals[]  = {
3118     {   0, "Service Negotiation Used"},
3119     {   1, "Service Negotiation Not Used"},
3120     {   2, "Service Negotiation Required"},
3121     {   3, "Service Negotiation Not Required"},
3122     {   0, NULL }
3123 };
3124 /* 6.5.2.au DataPrivacyParameters N.S0008-0 v 1.0*/
3125 /* Privacy Mode (PM) (octet 1, Bits A and B) */
3126 static const value_string ansi_map_DataPrivacyParameters_pm_vals[]  = {
3127     {   0, "Privacy inactive or not supported"},
3128     {   1, "Privacy Requested or Acknowledged"},
3129     {   2, "Reserved. Treat reserved values the same as value 0, Privacy inactive or not supported."},
3130     {   3, "Reserved. Treat reserved values the same as value 0, Privacy inactive or not supported."},
3131     {   0, NULL }
3132 };
3133 /* Data Privacy Version (PM) (octet 2) */
3134 static const value_string ansi_map_DataPrivacyParameters_data_priv_ver_vals[]  = {
3135     {   0, "Not used"},
3136     {   1, "Data Privacy Version 1"},
3137     {   0, NULL }
3138 };
3139
3140 /* 6.5.2.av ISLPInformation N.S0008-0 v 1.0*/
3141 /* ISLP Type (octet 1) */
3142 static const value_string ansi_map_islp_type_vals[]  = {
3143     {   0, "No ISLP supported"},
3144     {   1, "ISLP supported"},
3145     {   0, NULL }
3146 };
3147 /* 6.5.2.bc AnalogRedirectInfo */
3148 /* Sys Ordering (octet 1, bits A-E) */
3149 /* Ignore CDMA (IC) (octet 1, bit F) */
3150
3151 /* 6.5.2.be CDMAChannelNumber N.S0010-0 v 1.0*/
3152
3153 /* 6.5.2.bg CDMAPowerCombinedIndicator N.S0010-0 v 1.0*/
3154
3155 /* 6.5.2.bi CDMASearchParameters N.S0010-0 v 1.0*/
3156
3157 /* 6.5.2.bk CDMANetworkIdentification N.S0010-0 v 1.0*/
3158 /* See CDMA [J-STD-008] for encoding of this field. */
3159
3160 /* 6.5.2.bo RequiredParametersMask N.S0010-0 v 1.0 */
3161
3162 /* 6.5.2.bp ServiceRedirectionCause */
3163 static const value_string ansi_map_ServiceRedirectionCause_type_vals[]  = {
3164     {   0, "Not used"},
3165     {   1, "NormalRegistration"},
3166     {   2, "SystemNotFound."},
3167     {   3, "ProtocolMismatch."},
3168     {   4, "RegistrationRejection."},
3169     {   5, "WrongSID."},
3170     {   6, "WrongNID.."},
3171     {   0, NULL }
3172 };
3173
3174 /* 6.5.2.bq ServiceRedirectionInfo  N.S0010-0 v 1.0 */
3175
3176 /* 6.5.2.br RoamingIndication N.S0010-0 v 1.0*/
3177 /* See CDMA [TSB58] for the definition of this field. */
3178
3179 /* 6.5.2.bw CallingPartyName N.S0012-0 v 1.0*/
3180
3181 /* Presentation Status (octet 1, bits A and B) */
3182 static const value_string ansi_map_Presentation_Status_vals[]  = {
3183     {   0, "Presentation allowed"},
3184     {   1, "Presentation restricted"},
3185     {   2, "Blocking toggle"},
3186     {   3, "No indication"},
3187     {   0, NULL }
3188 };
3189 /* Availability (octet 1, bit E) N.S0012-0 v 1.0*/
3190 static const true_false_string ansi_map_Availability_bool_val  = {
3191     "Name not available",
3192     "Name available/unknown"
3193 };
3194 static void
3195 dissect_ansi_map_callingpartyname(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
3196