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