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