HACK: pinfo->private_data points to smb_info again
[wireshark-wip.git] / asn1 / ansi_map / packet-ansi_map-template.c
blob7f048ba62c81e22130498e763cd07a5c8ed37652
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.
8 * Copyright 2005 - 2009, Anders Broman <anders.broman@ericsson.com>
10 * $Id$
12 * Wireshark - Network traffic analyzer
13 * By Gerald Combs <gerald@wireshark.org>
14 * Copyright 1998 Gerald Combs
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.
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.
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
30 * Credit to Tomas Kukosa for developing the asn2wrs compiler.
32 * Title 3GPP2 Other
34 * Cellular Radiotelecommunications Intersystem Operations
35 * 3GPP2 N.S0005-0 v 1.0 ANSI/TIA/EIA-41-D
37 * Network Support for MDN-Based Message Centers
38 * 3GPP2 N.S0024-0 v1.0 IS-841
40 * Enhanced International Calling
41 * 3GPP2 N.S0027 IS-875
43 * ANSI-41-D Miscellaneous Enhancements Revision 0
44 * 3GPP2 N.S0015 PN-3590 (ANSI-41-E)
46 * Authentication Enhancements
47 * 3GPP2 N.S0014-0 v1.0 IS-778
49 * Features In CDMA
50 * 3GPP2 N.S0010-0 v1.0 IS-735
52 * OTASP and OTAPA
53 * 3GPP2 N.S0011-0 v1.0 IS-725-A
55 * Circuit Mode Services
56 * 3GPP2 N.S0008-0 v1.0 IS-737
57 * XXX SecondInterMSCCircuitID not implemented, parameter ID conflicts with ISLP Information!
59 * IMSI
60 * 3GPP2 N.S0009-0 v1.0 IS-751
62 * WIN Phase 1
63 * 3GPP2 N.S0013-0 v1.0 IS-771
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
69 * UIM
70 * 3GPP2 N.S0003
72 * WIN Phase 2
73 * 3GPP2 N.S0004-0 v1.0 IS-848
75 * TIA/EIA-41-D Pre-Paid Charging
76 * 3GPP2 N.S0018-0 v1.0 IS-826
78 * User Selective Call Forwarding
79 * 3GPP2 N.S0021-0 v1.0 IS-838
82 * Answer Hold
83 * 3GPP2 N.S0022-0 v1.0 IS-837
87 #include "config.h"
89 #include <glib.h>
90 #include <epan/packet.h>
91 #include <epan/prefs.h>
92 #include <epan/tap.h>
93 #include <epan/asn1.h>
94 #include <epan/wmem/wmem.h>
96 #include "packet-ber.h"
97 #include "packet-ansi_map.h"
98 #include "packet-ansi_a.h"
99 #include "packet-gsm_map.h"
100 #include "packet-tcap.h"
101 #include "packet-ansi_tcap.h"
103 #define PNAME "ANSI Mobile Application Part"
104 #define PSNAME "ANSI MAP"
105 #define PFNAME "ansi_map"
108 void proto_register_ansi_map(void);
109 void proto_reg_handoff_ansi_map(void);
111 /* Preference settings default */
112 #define MAX_SSN 254
113 static range_t *global_ssn_range;
114 gint ansi_map_response_matching_type = 1;
116 #define ANSI_MAP_TID_ONLY 0
118 static dissector_handle_t ansi_map_handle=NULL;
120 /* Initialize the protocol and registered fields */
121 static int ansi_map_tap = -1;
122 static int proto_ansi_map = -1;
124 static int hf_ansi_map_op_code_fam = -1;
125 static int hf_ansi_map_op_code = -1;
127 static int hf_ansi_map_reservedBitH = -1;
128 static int hf_ansi_map_reservedBitHG = -1;
129 static int hf_ansi_map_reservedBitHGFE = -1;
130 static int hf_ansi_map_reservedBitFED = -1;
131 static int hf_ansi_map_reservedBitD = -1;
132 static int hf_ansi_map_reservedBitED = -1;
134 static int hf_ansi_map_type_of_digits = -1;
135 static int hf_ansi_map_na = -1;
136 static int hf_ansi_map_pi = -1;
137 static int hf_ansi_map_navail = -1;
138 static int hf_ansi_map_si = -1;
139 static int hf_ansi_map_digits_enc = -1;
140 static int hf_ansi_map_np = -1;
141 static int hf_ansi_map_nr_digits = -1;
142 static int hf_ansi_map_bcd_digits = -1;
143 static int hf_ansi_map_ia5_digits = -1;
144 static int hf_ansi_map_subaddr_type = -1;
145 static int hf_ansi_map_subaddr_odd_even = -1;
146 static int hf_ansi_alertcode_cadence = -1;
147 static int hf_ansi_alertcode_pitch = -1;
148 static int hf_ansi_alertcode_alertaction = -1;
149 static int hf_ansi_map_announcementcode_tone = -1;
150 static int hf_ansi_map_announcementcode_class = -1;
151 static int hf_ansi_map_announcementcode_std_ann = -1;
152 static int hf_ansi_map_announcementcode_cust_ann = -1;
153 static int hf_ansi_map_authorizationperiod_period = -1;
154 static int hf_ansi_map_value = -1;
155 static int hf_ansi_map_msc_type = -1;
156 static int hf_ansi_map_handoffstate_pi = -1;
157 static int hf_ansi_map_tgn = -1;
158 static int hf_ansi_map_tmn = -1;
159 static int hf_ansi_map_messagewaitingnotificationcount_tom = -1;
160 static int hf_ansi_map_messagewaitingnotificationcount_no_mw = -1;
161 static int hf_ansi_map_messagewaitingnotificationtype_mwi = -1;
162 static int hf_ansi_map_messagewaitingnotificationtype_apt = -1;
163 static int hf_ansi_map_messagewaitingnotificationtype_pt = -1;
165 static int hf_ansi_map_trans_cap_prof = -1;
166 static int hf_ansi_map_trans_cap_busy = -1;
167 static int hf_ansi_map_trans_cap_ann = -1;
168 static int hf_ansi_map_trans_cap_rui = -1;
169 static int hf_ansi_map_trans_cap_spini = -1;
170 static int hf_ansi_map_trans_cap_uzci = -1;
171 static int hf_ansi_map_trans_cap_ndss = -1;
172 static int hf_ansi_map_trans_cap_nami = -1;
173 static int hf_ansi_trans_cap_multerm = -1;
174 static int hf_ansi_map_terminationtriggers_busy = -1;
175 static int hf_ansi_map_terminationtriggers_rf = -1;
176 static int hf_ansi_map_terminationtriggers_npr = -1;
177 static int hf_ansi_map_terminationtriggers_na = -1;
178 static int hf_ansi_map_terminationtriggers_nr = -1;
179 static int hf_ansi_trans_cap_tl = -1;
180 static int hf_ansi_map_cdmaserviceoption = -1;
181 static int hf_ansi_trans_cap_waddr = -1;
182 static int hf_ansi_map_MarketID = -1;
183 static int hf_ansi_map_swno = -1;
184 static int hf_ansi_map_idno = -1;
185 static int hf_ansi_map_segcount = -1;
186 static int hf_ansi_map_sms_originationrestrictions_fmc = -1;
187 static int hf_ansi_map_sms_originationrestrictions_direct = -1;
188 static int hf_ansi_map_sms_originationrestrictions_default = -1;
189 static int hf_ansi_map_systemcapabilities_auth = -1;
190 static int hf_ansi_map_systemcapabilities_se = -1;
191 static int hf_ansi_map_systemcapabilities_vp = -1;
192 static int hf_ansi_map_systemcapabilities_cave = -1;
193 static int hf_ansi_map_systemcapabilities_ssd = -1;
194 static int hf_ansi_map_systemcapabilities_dp = -1;
196 static int hf_ansi_map_mslocation_lat = -1;
197 static int hf_ansi_map_mslocation_long = -1;
198 static int hf_ansi_map_mslocation_res = -1;
199 static int hf_ansi_map_nampscallmode_namps = -1;
200 static int hf_ansi_map_nampscallmode_amps = -1;
201 static int hf_ansi_map_nampschanneldata_navca = -1;
202 static int hf_ansi_map_nampschanneldata_CCIndicator = -1;
204 static int hf_ansi_map_callingfeaturesindicator_cfufa = -1;
205 static int hf_ansi_map_callingfeaturesindicator_cfbfa = -1;
206 static int hf_ansi_map_callingfeaturesindicator_cfnafa = -1;
207 static int hf_ansi_map_callingfeaturesindicator_cwfa = -1;
208 static int hf_ansi_map_callingfeaturesindicator_3wcfa = -1;
209 static int hf_ansi_map_callingfeaturesindicator_pcwfa =-1;
210 static int hf_ansi_map_callingfeaturesindicator_dpfa = -1;
211 static int hf_ansi_map_callingfeaturesindicator_ahfa = -1;
212 static int hf_ansi_map_callingfeaturesindicator_uscfvmfa = -1;
213 static int hf_ansi_map_callingfeaturesindicator_uscfmsfa = -1;
214 static int hf_ansi_map_callingfeaturesindicator_uscfnrfa = -1;
215 static int hf_ansi_map_callingfeaturesindicator_cpdsfa = -1;
216 static int hf_ansi_map_callingfeaturesindicator_ccsfa = -1;
217 static int hf_ansi_map_callingfeaturesindicator_epefa = -1;
218 static int hf_ansi_map_callingfeaturesindicator_cdfa = -1;
219 static int hf_ansi_map_callingfeaturesindicator_vpfa = -1;
220 static int hf_ansi_map_callingfeaturesindicator_ctfa = -1;
221 static int hf_ansi_map_callingfeaturesindicator_cnip1fa = -1;
222 static int hf_ansi_map_callingfeaturesindicator_cnip2fa = -1;
223 static int hf_ansi_map_callingfeaturesindicator_cnirfa = -1;
224 static int hf_ansi_map_callingfeaturesindicator_cniroverfa = -1;
225 static int hf_ansi_map_cdmacallmode_cdma = -1;
226 static int hf_ansi_map_cdmacallmode_amps = -1;
227 static int hf_ansi_map_cdmacallmode_namps = -1;
228 static int hf_ansi_map_cdmacallmode_cls1 = -1;
229 static int hf_ansi_map_cdmacallmode_cls2 = -1;
230 static int hf_ansi_map_cdmacallmode_cls3 = -1;
231 static int hf_ansi_map_cdmacallmode_cls4 = -1;
232 static int hf_ansi_map_cdmacallmode_cls5 = -1;
233 static int hf_ansi_map_cdmacallmode_cls6 = -1;
234 static int hf_ansi_map_cdmacallmode_cls7 = -1;
235 static int hf_ansi_map_cdmacallmode_cls8 = -1;
236 static int hf_ansi_map_cdmacallmode_cls9 = -1;
237 static int hf_ansi_map_cdmacallmode_cls10 = -1;
238 static int hf_ansi_map_cdmachanneldata_Frame_Offset = -1;
239 static int hf_ansi_map_cdmachanneldata_CDMA_ch_no = -1;
240 static int hf_ansi_map_cdmachanneldata_band_cls = -1;
241 static int hf_ansi_map_cdmachanneldata_lc_mask_b6 = -1;
242 static int hf_ansi_map_cdmachanneldata_lc_mask_b5 = -1;
243 static int hf_ansi_map_cdmachanneldata_lc_mask_b4 = -1;
244 static int hf_ansi_map_cdmachanneldata_lc_mask_b3 = -1;
245 static int hf_ansi_map_cdmachanneldata_lc_mask_b2 = -1;
246 static int hf_ansi_map_cdmachanneldata_lc_mask_b1 = -1;
247 static int hf_ansi_map_cdmachanneldata_np_ext = -1;
248 static int hf_ansi_map_cdmachanneldata_nominal_pwr = -1;
249 static int hf_ansi_map_cdmachanneldata_nr_preamble = -1;
251 static int hf_ansi_map_cdmastationclassmark_pc = -1;
252 static int hf_ansi_map_cdmastationclassmark_dtx = -1;
253 static int hf_ansi_map_cdmastationclassmark_smi = -1;
254 static int hf_ansi_map_cdmastationclassmark_dmi = -1;
255 static int hf_ansi_map_channeldata_vmac = -1;
256 static int hf_ansi_map_channeldata_dtx = -1;
257 static int hf_ansi_map_channeldata_scc = -1;
258 static int hf_ansi_map_channeldata_chno = -1;
259 static int hf_ansi_map_ConfidentialityModes_vp = -1;
260 static int hf_ansi_map_controlchanneldata_dcc = -1;
261 static int hf_ansi_map_controlchanneldata_cmac = -1;
262 static int hf_ansi_map_controlchanneldata_chno = -1;
263 static int hf_ansi_map_controlchanneldata_sdcc1 = -1;
264 static int hf_ansi_map_controlchanneldata_sdcc2 = -1;
265 static int hf_ansi_map_ConfidentialityModes_se = -1;
266 static int hf_ansi_map_deniedauthorizationperiod_period = -1;
267 static int hf_ansi_map_ConfidentialityModes_dp = -1;
269 static int hf_ansi_map_originationtriggers_all = -1;
270 static int hf_ansi_map_originationtriggers_local = -1;
271 static int hf_ansi_map_originationtriggers_ilata = -1;
272 static int hf_ansi_map_originationtriggers_olata = -1;
273 static int hf_ansi_map_originationtriggers_int = -1;
274 static int hf_ansi_map_originationtriggers_wz = -1;
275 static int hf_ansi_map_originationtriggers_unrec = -1;
276 static int hf_ansi_map_originationtriggers_rvtc = -1;
277 static int hf_ansi_map_originationtriggers_star = -1;
278 static int hf_ansi_map_originationtriggers_ds = -1;
279 static int hf_ansi_map_originationtriggers_pound = -1;
280 static int hf_ansi_map_originationtriggers_dp = -1;
281 static int hf_ansi_map_originationtriggers_pa = -1;
282 static int hf_ansi_map_originationtriggers_nodig = -1;
283 static int hf_ansi_map_originationtriggers_onedig = -1;
284 static int hf_ansi_map_originationtriggers_twodig = -1;
285 static int hf_ansi_map_originationtriggers_threedig = -1;
286 static int hf_ansi_map_originationtriggers_fourdig = -1;
287 static int hf_ansi_map_originationtriggers_fivedig = -1;
288 static int hf_ansi_map_originationtriggers_sixdig = -1;
289 static int hf_ansi_map_originationtriggers_sevendig = -1;
290 static int hf_ansi_map_originationtriggers_eightdig = -1;
291 static int hf_ansi_map_originationtriggers_ninedig = -1;
292 static int hf_ansi_map_originationtriggers_tendig = -1;
293 static int hf_ansi_map_originationtriggers_elevendig = -1;
294 static int hf_ansi_map_originationtriggers_twelvedig = -1;
295 static int hf_ansi_map_originationtriggers_thirteendig = -1;
296 static int hf_ansi_map_originationtriggers_fourteendig = -1;
297 static int hf_ansi_map_originationtriggers_fifteendig = -1;
298 static int hf_ansi_map_triggercapability_init = -1;
299 static int hf_ansi_map_triggercapability_kdigit = -1;
300 static int hf_ansi_map_triggercapability_all = -1;
301 static int hf_ansi_map_triggercapability_rvtc = -1;
302 static int hf_ansi_map_triggercapability_oaa = -1;
303 static int hf_ansi_map_triggercapability_oans = -1;
304 static int hf_ansi_map_triggercapability_odisc = -1;
305 static int hf_ansi_map_triggercapability_ona = -1;
306 static int hf_ansi_map_triggercapability_ct = -1;
307 static int hf_ansi_map_triggercapability_unrec =-1;
308 static int hf_ansi_map_triggercapability_pa = -1;
309 static int hf_ansi_map_triggercapability_at = -1;
310 static int hf_ansi_map_triggercapability_cgraa = -1;
311 static int hf_ansi_map_triggercapability_it = -1;
312 static int hf_ansi_map_triggercapability_cdraa = -1;
313 static int hf_ansi_map_triggercapability_obsy = -1;
314 static int hf_ansi_map_triggercapability_tra = -1;
315 static int hf_ansi_map_triggercapability_tbusy = -1;
316 static int hf_ansi_map_triggercapability_tna = -1;
317 static int hf_ansi_map_triggercapability_tans = -1;
318 static int hf_ansi_map_triggercapability_tdisc = -1;
319 static int hf_ansi_map_winoperationscapability_conn = -1;
320 static int hf_ansi_map_winoperationscapability_ccdir = -1;
321 static int hf_ansi_map_winoperationscapability_pos = -1;
322 static int hf_ansi_map_PACA_Level = -1;
323 static int hf_ansi_map_pacaindicator_pa = -1;
325 #include "packet-ansi_map-hf.c"
327 /* Initialize the subtree pointers */
328 static gint ett_ansi_map = -1;
329 static gint ett_mintype = -1;
330 static gint ett_digitstype = -1;
331 static gint ett_billingid = -1;
332 static gint ett_sms_bearer_data = -1;
333 static gint ett_sms_teleserviceIdentifier = -1;
334 static gint ett_extendedmscid = -1;
335 static gint ett_extendedsystemmytypecode = -1;
336 static gint ett_handoffstate = -1;
337 static gint ett_mscid = -1;
338 static gint ett_cdmachanneldata = -1;
339 static gint ett_cdmastationclassmark = -1;
340 static gint ett_channeldata = -1;
341 static gint ett_confidentialitymodes = -1;
342 static gint ett_controlchanneldata = -1;
343 static gint ett_CDMA2000HandoffInvokeIOSData = -1;
344 static gint ett_CDMA2000HandoffResponseIOSData = -1;
345 static gint ett_originationtriggers = -1;
346 static gint ett_pacaindicator = -1;
347 static gint ett_callingpartyname = -1;
348 static gint ett_triggercapability = -1;
349 static gint ett_winoperationscapability = -1;
350 static gint ett_win_trigger_list = -1;
351 static gint ett_controlnetworkid = -1;
352 static gint ett_transactioncapability = -1;
353 static gint ett_cdmaserviceoption = -1;
354 static gint ett_systemcapabilities = -1;
355 static gint ett_sms_originationrestrictions = -1;
357 #include "packet-ansi_map-ett.c"
359 /* Global variables */
360 static dissector_table_t is637_tele_id_dissector_table; /* IS-637 Teleservice ID */
361 static dissector_table_t is683_dissector_table; /* IS-683-A (OTA) */
362 static dissector_table_t is801_dissector_table; /* IS-801 (PLD) */
363 static packet_info *g_pinfo;
364 static proto_tree *g_tree;
365 tvbuff_t *SMS_BearerData_tvb = NULL;
366 gint32 ansi_map_sms_tele_id = -1;
367 static gboolean is683_ota;
368 static gboolean is801_pld;
369 static gboolean ansi_map_is_invoke;
370 static guint32 OperationCode;
371 static guint8 ServiceIndicator;
374 struct ansi_map_invokedata_t {
375 guint32 opcode;
376 guint8 ServiceIndicator;
379 static void dissect_ansi_map_win_trigger_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_);
382 /* Transaction table */
383 static GHashTable *TransactionId_table=NULL;
385 static void
386 ansi_map_init_transaction_table(void){
388 /* Destroy any existing memory chunks / hashes. */
389 if (TransactionId_table){
390 g_hash_table_destroy(TransactionId_table);
393 TransactionId_table = g_hash_table_new(g_str_hash, g_str_equal);
396 static void
397 ansi_map_init_protocol(void)
399 ansi_map_init_transaction_table();
402 /* Store Invoke information needed for the corresponding reply */
403 static void
404 update_saved_invokedata(packet_info *pinfo, struct ansi_tcap_private_t *p_private_tcap){
405 struct ansi_map_invokedata_t *ansi_map_saved_invokedata;
406 address* src = &(pinfo->src);
407 address* dst = &(pinfo->dst);
408 guint8 *src_str;
409 guint8 *dst_str;
410 const char *buf = NULL;
412 src_str = ep_address_to_str(src);
413 dst_str = ep_address_to_str(dst);
415 /* Data from the TCAP dissector */
416 if ((!pinfo->fd->flags.visited)&&(p_private_tcap->TransactionID_str)){
417 /* Only do this once XXX I hope it's the right thing to do */
418 /* The hash string needs to contain src and dest to distiguish differnt flows */
419 switch(ansi_map_response_matching_type){
420 case ANSI_MAP_TID_ONLY:
421 buf = wmem_strdup(wmem_packet_scope(), p_private_tcap->TransactionID_str);
422 break;
423 case 1:
424 buf = wmem_strdup_printf(wmem_packet_scope(), "%s%s",p_private_tcap->TransactionID_str,src_str);
425 break;
426 default:
427 buf = wmem_strdup_printf(wmem_packet_scope(), "%s%s%s",p_private_tcap->TransactionID_str,src_str,dst_str);
428 break;
430 /* If the entry allready exists don't owervrite it */
431 ansi_map_saved_invokedata = (struct ansi_map_invokedata_t *)g_hash_table_lookup(TransactionId_table,buf);
432 if(ansi_map_saved_invokedata)
433 return;
435 ansi_map_saved_invokedata = wmem_new(wmem_file_scope(), struct ansi_map_invokedata_t);
436 ansi_map_saved_invokedata->opcode = p_private_tcap->d.OperationCode_private;
437 ansi_map_saved_invokedata->ServiceIndicator = ServiceIndicator;
439 g_hash_table_insert(TransactionId_table,
440 wmem_strdup(wmem_file_scope(), buf),
441 ansi_map_saved_invokedata);
443 /*g_warning("Invoke Hash string %s pkt: %u",buf,pinfo->fd->num);*/
446 /* value strings */
447 const value_string ansi_map_opr_code_strings[] = {
448 { 1, "Handoff Measurement Request" },
449 { 2, "Facilities Directive" },
450 { 3, "Mobile On Channel" },
451 { 4, "Handoff Back" },
452 { 5, "Facilities Release" },
453 { 6, "Qualification Request" },
454 { 7, "Qualification Directive" },
455 { 8, "Blocking" },
456 { 9, "Unblocking" },
457 { 10, "Reset Circuit" },
458 { 11, "Trunk Test" },
459 { 12, "Trunk Test Disconnect" },
460 { 13, "Registration Notification" },
461 { 14, "Registration Cancellation" },
462 { 15, "Location Request" },
463 { 16, "Routing Request" },
464 { 17, "Feature Request" },
465 { 18, "Reserved 18 (Service Profile Request, IS-41-C)" },
466 { 19, "Reserved 19 (Service Profile Directive, IS-41-C)" },
467 { 20, "Unreliable Roamer Data Directive" },
468 { 21, "Reserved 21 (Call Data Request, IS-41-C)" },
469 { 22, "MS Inactive" },
470 { 23, "Transfer To Number Request" },
471 { 24, "Redirection Request" },
472 { 25, "Handoff To Third" },
473 { 26, "Flash Request" },
474 { 27, "Authentication Directive" },
475 { 28, "Authentication Request" },
476 { 29, "Base Station Challenge" },
477 { 30, "Authentication Failure Report" },
478 { 31, "Count Request" },
479 { 32, "Inter System Page" },
480 { 33, "Unsolicited Response" },
481 { 34, "Bulk Deregistration" },
482 { 35, "Handoff Measurement Request 2" },
483 { 36, "Facilities Directive 2" },
484 { 37, "Handoff Back 2" },
485 { 38, "Handoff To Third 2" },
486 { 39, "Authentication Directive Forward" },
487 { 40, "Authentication Status Report" },
488 { 41, "Reserved 41" },
489 { 42, "Information Directive" },
490 { 43, "Information Forward" },
491 { 44, "Inter System Answer" },
492 { 45, "Inter System Page 2" },
493 { 46, "Inter System Setup" },
494 { 47, "Origination Request" },
495 { 48, "Random Variable Request" },
496 { 49, "Redirection Directive" },
497 { 50, "Remote User Interaction Directive" },
498 { 51, "SMS Delivery Backward" },
499 { 52, "SMS Delivery Forward" },
500 { 53, "SMS Delivery Point to Point" },
501 { 54, "SMS Notification" },
502 { 55, "SMS Request" },
503 { 56, "OTASP Request" },
504 { 57, "Information Backward" },
505 { 58, "Change Facilities" },
506 { 59, "Change Service" },
507 { 60, "Parameter Request" },
508 { 61, "TMSI Directive" },
509 { 62, "NumberPortabilityRequest" },
510 { 63, "Service Request" },
511 { 64, "Analyzed Information Request" },
512 { 65, "Connection Failure Report" },
513 { 66, "Connect Resource" },
514 { 67, "Disconnect Resource" },
515 { 68, "Facility Selected and Available" },
516 { 69, "Instruction Request" },
517 { 70, "Modify" },
518 { 71, "Reset Timer" },
519 { 72, "Search" },
520 { 73, "Seize Resource" },
521 { 74, "SRF Directive" },
522 { 75, "T Busy" },
523 { 76, "T NoAnswer" },
524 { 77, "Release" },
525 { 78, "SMS Delivery Point to Point Ack" },
526 { 79, "Message Directive" },
527 { 80, "Bulk Disconnection" },
528 { 81, "Call Control Directive" },
529 { 82, "O Answer" },
530 { 83, "O Disconnect" },
531 { 84, "Call Recovery Report" },
532 { 85, "T Answer" },
533 { 86, "T Disconnect" },
534 { 87, "Unreliable Call Data" },
535 { 88, "O CalledPartyBusy" },
536 { 89, "O NoAnswer" },
537 { 90, "Position Request" },
538 { 91, "Position Request Forward" },
539 { 92, "Call Termination Report" },
540 { 93, "Geo Position Directive" },
541 { 94, "Geo Position Request" },
542 { 95, "Inter System Position Request" },
543 { 96, "Inter System Position Request Forward" },
544 { 97, "ACG Directive" },
545 { 98, "Roamer Database Verification Request" },
546 { 99, "Add Service" },
547 { 100, "Drop Service" },
548 { 101, "InterSystemSMSPage" },
549 { 102, "LCSParameterRequest" },
550 { 103, "Unknown ANSI-MAP PDU" },
551 { 104, "Unknown ANSI-MAP PDU" },
552 { 105, "Unknown ANSI-MAP PDU" },
553 { 106, "PositionEventNotification" },
554 { 107, "Unknown ANSI-MAP PDU" },
555 { 108, "Unknown ANSI-MAP PDU" },
556 { 109, "Unknown ANSI-MAP PDU" },
557 { 110, "Unknown ANSI-MAP PDU" },
558 { 111, "InterSystemSMSDelivery-PointToPoint" },
559 { 112, "QualificationRequest2" },
560 { 0, NULL },
562 static value_string_ext ansi_map_opr_code_strings_ext = VALUE_STRING_EXT_INIT(ansi_map_opr_code_strings);
564 static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx);
565 static int dissect_returnData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx);
566 static int dissect_ansi_map_SystemMyTypeCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index _U_);
568 static dgt_set_t Dgt_tbcd = {
570 /* 0 1 2 3 4 5 6 7 8 9 a b c d e */
571 '0','1','2','3','4','5','6','7','8','9','?','B','C','*','#'
575 /* Type of Digits (octet 1, bits A-H) */
576 static const value_string ansi_map_type_of_digits_vals[] = {
577 { 0, "Not Used" },
578 { 1, "Dialed Number or Called Party Number" },
579 { 2, "Calling Party Number" },
580 { 3, "Caller Interaction" },
581 { 4, "Routing Number" },
582 { 5, "Billing Number" },
583 { 6, "Destination Number" },
584 { 7, "LATA" },
585 { 8, "Carrier" },
586 { 0, NULL }
588 /* Nature of Number (octet 2, bits A-H )*/
589 static const true_false_string ansi_map_na_bool_val = {
590 "International",
591 "National"
593 static const true_false_string ansi_map_pi_bool_val = {
594 "Presentation Restricted",
595 "Presentation Allowed"
597 static const true_false_string ansi_map_navail_bool_val = {
598 "Number is not available",
599 "Number is available"
601 #if 0
602 static const true_false_string ansi_map_si_bool_val = {
603 "User provided, screening passed",
604 "User provided, not screened"
606 #endif
607 static const value_string ansi_map_si_vals[] = {
608 { 0, "User provided, not screened"},
609 { 1, "User provided, screening passed"},
610 { 2, "User provided, screening failed"},
611 { 3, "Network provided"},
612 { 0, NULL }
614 /* Encoding (octet 3, bits A-D) */
615 static const value_string ansi_map_digits_enc_vals[] = {
616 { 0, "Not used"},
617 { 1, "BCD"},
618 { 2, "IA5"},
619 { 3, "Octet string"},
620 { 0, NULL }
622 /* Numbering Plan (octet 3, bits E-H) */
623 static const value_string ansi_map_np_vals[] = {
624 { 0, "Unknown or not applicable"},
625 { 1, "ISDN Numbering"},
626 { 2, "Telephony Numbering (ITU-T Rec. E.164,E.163)"},
627 { 3, "Data Numbering (ITU-T Rec. X.121)"},
628 { 4, "Telex Numbering (ITU-T Rec. F.69)"},
629 { 5, "Maritime Mobile Numbering"},
630 { 6, "Land Mobile Numbering (ITU-T Rec. E.212)"},
631 { 7, "Private Numbering Plan"},
632 { 13, "SS7 Point Code (PC) and Subsystem Number (SSN)"},
633 { 14, "Internet Protocol (IP) Address."},
634 { 15, "Reserved for extension"},
635 { 0, NULL }
638 static void
639 dissect_ansi_map_min_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
640 const char *digit_str;
641 int offset = 0;
643 proto_tree *subtree;
646 subtree = proto_item_add_subtree(actx->created_item, ett_mintype);
648 digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, offset, tvb_length_remaining(tvb,offset), NULL, FALSE);
649 proto_tree_add_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, digit_str);
650 proto_item_append_text(actx->created_item, " - %s", digit_str);
653 static void
654 dissect_ansi_map_digits_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
656 guint8 octet , octet_len;
657 guint8 b1,b2,b3,b4;
658 int offset = 0;
659 const char *digit_str;
661 proto_tree *subtree;
664 subtree = proto_item_add_subtree(actx->created_item, ett_digitstype);
666 /* Octet 1 */
667 proto_tree_add_item(subtree, hf_ansi_map_type_of_digits, tvb, offset, 1, ENC_BIG_ENDIAN);
668 offset++;
669 /* Octet 2 */
670 proto_tree_add_item(subtree, hf_ansi_map_reservedBitHG, tvb, offset, 1, ENC_BIG_ENDIAN);
671 proto_tree_add_item(subtree, hf_ansi_map_si, tvb, offset, 1, ENC_BIG_ENDIAN);
672 proto_tree_add_item(subtree, hf_ansi_map_reservedBitD, tvb, offset, 1, ENC_BIG_ENDIAN);
673 proto_tree_add_item(subtree, hf_ansi_map_navail, tvb, offset, 1, ENC_BIG_ENDIAN);
674 proto_tree_add_item(subtree, hf_ansi_map_pi, tvb, offset, 1, ENC_BIG_ENDIAN);
675 proto_tree_add_item(subtree, hf_ansi_map_na, tvb, offset, 1, ENC_BIG_ENDIAN);
676 offset++;
677 /* Octet 3 */
678 octet = tvb_get_guint8(tvb,offset);
679 proto_tree_add_item(subtree, hf_ansi_map_np, tvb, offset, 1, ENC_BIG_ENDIAN);
680 proto_tree_add_item(subtree, hf_ansi_map_digits_enc, tvb, offset, 1, ENC_BIG_ENDIAN);
681 offset++;
682 /* Octet 4 - */
683 switch(octet>>4){
684 case 0:/* Unknown or not applicable */
685 switch ((octet&0xf)){
686 case 1:
687 /* BCD Coding */
688 octet_len = tvb_get_guint8(tvb,offset);
689 proto_tree_add_item(subtree, hf_ansi_map_nr_digits, tvb, offset, 1, ENC_BIG_ENDIAN);
690 if(octet_len == 0)
691 return;
692 offset++;
693 digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, offset, tvb_length_remaining(tvb,offset), &Dgt_tbcd, FALSE);
694 proto_tree_add_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, digit_str);
695 proto_item_append_text(actx->created_item, " - %s", digit_str);
696 break;
697 case 2:
698 /* IA5 Coding */
699 octet_len = tvb_get_guint8(tvb,offset);
700 proto_tree_add_item(subtree, hf_ansi_map_nr_digits, tvb, offset, 1, ENC_BIG_ENDIAN);
701 if(octet_len == 0)
702 return;
703 offset++;
704 proto_tree_add_item(subtree, hf_ansi_map_ia5_digits, tvb, offset, -1, ENC_ASCII|ENC_NA);
705 proto_item_append_text(actx->created_item, " - %s", tvb_get_string(wmem_packet_scope(),tvb,offset,tvb_length_remaining(tvb,offset)));
706 break;
707 case 3:
708 /* Octet string */
709 break;
710 default:
711 break;
713 break;
714 case 1:/* ISDN Numbering (not used in this Standard). */
715 case 3:/* Data Numbering (ITU-T Rec. X.121) (not used in this Standard). */
716 case 4:/* Telex Numbering (ITU-T Rec. F.69) (not used in this Standard). */
717 case 5:/* Maritime Mobile Numbering (not used in this Standard). */
718 proto_tree_add_text(subtree, tvb, offset, -1, "This Number plan should not have been used");
719 break;
720 case 2:/* Telephony Numbering (ITU-T Rec. E.164,E.163). */
721 case 6:/* Land Mobile Numbering (ITU-T Rec. E.212) */
722 case 7:/* Private Numbering Plan */
723 octet_len = tvb_get_guint8(tvb,offset);
724 proto_tree_add_item(subtree, hf_ansi_map_nr_digits, tvb, offset, 1, ENC_BIG_ENDIAN);
725 if(octet_len == 0)
726 return;
727 offset++;
728 switch ((octet&0xf)){
729 case 1:
730 /* BCD Coding */
731 digit_str = tvb_bcd_dig_to_wmem_packet_str(tvb, offset, tvb_length_remaining(tvb,offset), &Dgt_tbcd, FALSE);
732 proto_tree_add_string(subtree, hf_ansi_map_bcd_digits, tvb, offset, -1, digit_str);
733 proto_item_append_text(actx->created_item, " - %s", digit_str);
734 break;
735 case 2:
736 /* IA5 Coding */
737 proto_tree_add_item(subtree, hf_ansi_map_ia5_digits, tvb, offset, -1, ENC_ASCII|ENC_NA);
738 proto_item_append_text(actx->created_item, " - %s", tvb_get_string(wmem_packet_scope(),tvb,offset,tvb_length_remaining(tvb,offset)));
739 break;
740 case 3:
741 /* Octet string */
742 break;
743 default:
744 break;
746 break;
747 case 13:/* ANSI SS7 Point Code (PC) and Subsystem Number (SSN). */
748 switch ((octet&0xf)){
749 case 3:
750 /* Octet string */
751 /* Point Code Member Number octet 2 */
752 b1 = tvb_get_guint8(tvb,offset);
753 offset++;
754 /* Point Code Cluster Number octet 3 */
755 b2 = tvb_get_guint8(tvb,offset);
756 offset++;
757 /* Point Code Network Number octet 4 */
758 b3 = tvb_get_guint8(tvb,offset);
759 offset++;
760 /* Subsystem Number (SSN) octet 5 */
761 b4 = tvb_get_guint8(tvb,offset);
762 proto_tree_add_text(subtree, tvb, offset-3, 4 , "Point Code %u-%u-%u SSN %u",
763 b3, b2, b1, b4);
764 proto_item_append_text(actx->created_item, " - Point Code %u-%u-%u SSN %u", b3, b2, b1, b4);
765 break;
766 default:
767 break;
769 break;
770 case 14:/* Internet Protocol (IP) Address. */
771 break;
772 default:
773 proto_tree_add_text(subtree, tvb, offset, -1, "This Number plan should not have been used");
774 break;
778 /* 6.5.3.13. Subaddress */
780 #if 0
781 static const true_false_string ansi_map_Odd_Even_Ind_bool_val = {
782 "Odd",
783 "Even"
785 #endif
786 /* Type of Subaddress (octet 1, bits E-G) */
787 static const value_string ansi_map_sub_addr_type_vals[] = {
788 { 0, "NSAP (CCITT Rec. X.213 or ISO 8348 AD2)"},
789 { 1, "User specified"},
790 { 2, "Reserved"},
791 { 3, "Reserved"},
792 { 4, "Reserved"},
793 { 5, "Reserved"},
794 { 6, "Reserved"},
795 { 7, "Reserved"},
796 { 0, NULL }
799 static void
800 dissect_ansi_map_subaddress(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
801 int offset = 0;
803 proto_tree *subtree;
806 subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
807 /* Type of Subaddress (octet 1, bits E-G) */
808 proto_tree_add_item(subtree, hf_ansi_map_subaddr_type, tvb, offset, 1, ENC_BIG_ENDIAN);
809 /* Odd/Even Indicator (O/E) (octet 1, bit D) */
810 proto_tree_add_item(subtree, hf_ansi_map_subaddr_odd_even, tvb, offset, 1, ENC_BIG_ENDIAN);
814 * 6.5.2.2 ActionCode
815 * Table 114 ActionCode value
817 * 6.5.2.2 ActionCode(TIA/EIA-41.5-D, page 5-129) */
819 static const value_string ansi_map_ActionCode_vals[] = {
820 { 0, "Not used"},
821 { 1, "Continue processing"},
822 { 2, "Disconnect call"},
823 { 3, "Disconnect call leg"},
824 { 4, "Conference Calling Drop Last Party"},
825 { 5, "Bridge call leg(s) to conference call"},
826 { 6, "Drop call leg on busy or routing failure"},
827 { 7, "Disconnect all call legs"},
828 { 8, "Attach MSC to OTAF"},
829 { 9, "Initiate RegistrationNotification"},
830 { 10, "Generate Public Encryption values"},
831 { 11, "Generate A-key"},
832 { 12, "Perform SSD Update procedure"},
833 { 13, "Perform Re-authentication procedure"},
834 { 14, "Release TRN"},
835 { 15, "Commit A-key"},
836 { 16, "Release Resources (e.g., A-key, Traffic Channel)"},
837 { 17, "Record NEWMSID"},
838 { 18, "Allocate Resources (e.g., Multiple message traffic channel delivery)."},
839 { 19, "Generate Authentication Signature"},
840 { 20, "Release leg and redirect subscriber"},
841 { 21, "Do Not Wait For MS User Level Response"},
842 { 22, "Prepare for CDMA Handset-Based Position Determination"},
843 { 23, "CDMA Handset-Based Position Determination Complete"},
844 { 0, NULL }
846 static value_string_ext ansi_map_ActionCode_vals_ext = VALUE_STRING_EXT_INIT(ansi_map_ActionCode_vals);
848 /* 6.5.2.3 AlertCode */
850 /* Pitch (octet 1, bits G-H) */
851 static const value_string ansi_map_AlertCode_Pitch_vals[] = {
852 { 0, "Medium pitch"},
853 { 1, "High pitch"},
854 { 2, "Low pitch"},
855 { 3, "Reserved"},
856 { 0, NULL }
858 /* Cadence (octet 1, bits A-F) */
859 static const value_string ansi_map_AlertCode_Cadence_vals[] = {
860 { 0, "NoTone"},
861 { 1, "Long"},
862 { 2, "ShortShort"},
863 { 3, "ShortShortLong"},
864 { 4, "ShortShort2"},
865 { 5, "ShortLongShort"},
866 { 6, "ShortShortShortShort"},
867 { 7, "PBXLong"},
868 { 8, "PBXShortShort"},
869 { 9, "PBXShortShortLong"},
871 { 10, "PBXShortLongShort"},
872 { 11, "PBXShortShortShortShort"},
873 { 12, "PipPipPipPip"},
874 { 13, "Reserved. Treat the same as value 0, NoTone"},
875 { 14, "Reserved. Treat the same as value 0, NoTone"},
876 { 15, "Reserved. Treat the same as value 0, NoTone"},
877 { 16, "Reserved. Treat the same as value 0, NoTone"},
878 { 17, "Reserved. Treat the same as value 0, NoTone"},
879 { 18, "Reserved. Treat the same as value 0, NoTone"},
880 { 19, "Reserved. Treat the same as value 0, NoTone"},
881 { 0, NULL }
884 /* Alert Action (octet 2, bits A-C) */
885 static const value_string ansi_map_AlertCode_Alert_Action_vals[] = {
886 { 0, "Alert without waiting to report"},
887 { 1, "Apply a reminder alert once"},
888 { 2, "Other values reserved. Treat the same as value 0, Alert without waiting to report"},
889 { 3, "Other values reserved. Treat the same as value 0, Alert without waiting to report"},
890 { 4, "Other values reserved. Treat the same as value 0, Alert without waiting to report"},
891 { 5, "Other values reserved. Treat the same as value 0, Alert without waiting to report"},
892 { 6, "Other values reserved. Treat the same as value 0, Alert without waiting to report"},
893 { 7, "Other values reserved. Treat the same as value 0, Alert without waiting to report"},
894 { 0, NULL }
896 static void
897 dissect_ansi_map_alertcode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
899 int offset = 0;
901 proto_tree *subtree;
904 subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
905 /* Pitch (octet 1, bits G-H) */
906 proto_tree_add_item(subtree, hf_ansi_alertcode_pitch, tvb, offset, 1, ENC_BIG_ENDIAN);
907 /* Cadence (octet 1, bits A-F) */
908 proto_tree_add_item(subtree, hf_ansi_alertcode_cadence, tvb, offset, 1, ENC_BIG_ENDIAN);
909 offset++;
911 /* Alert Action (octet 2, bits A-C) */
912 proto_tree_add_item(subtree, hf_ansi_alertcode_alertaction, tvb, offset, 1, ENC_BIG_ENDIAN);
915 /* 6.5.2.4 AlertResult */
916 /* Result (octet 1) */
917 static const value_string ansi_map_AlertResult_result_vals[] = {
918 { 0, "Not specified"},
919 { 1, "Success"},
920 { 2, "Failure"},
921 { 3, "Denied"},
922 { 4, "NotAttempted"},
923 { 5, "NoPageResponse"},
924 { 6, "Busy"},
925 { 0, NULL }
928 /* 6.5.2.5 AnnouncementCode Updatef from NS0018Re*/
929 /* Tone (octet 1) */
930 static const value_string ansi_map_AnnouncementCode_tone_vals[] = {
931 { 0, "DialTone"},
932 { 1, "RingBack or AudibleAlerting"},
933 { 2, "InterceptTone or MobileReorder"},
934 { 3, "CongestionTone or ReorderTone"},
935 { 4, "BusyTone"},
936 { 5, "ConfirmationTone"},
937 { 6, "AnswerTone"},
938 { 7, "CallWaitingTone"},
939 { 8, "OffHookTone"},
940 { 17, "RecallDialTone"},
941 { 18, "BargeInTone"},
942 { 20, "PPCInsufficientTone"},
943 { 21, "PPCWarningTone1"},
944 { 22, "PPCWarningTone2"},
945 { 23, "PPCWarningTone3"},
946 { 24, "PPCDisconnectTone"},
947 { 25, "PPCRedirectTone"},
948 { 63, "TonesOff"},
949 { 192, "PipTone"},
950 { 193, "AbbreviatedIntercept"},
951 { 194, "AbbreviatedCongestion"},
952 { 195, "WarningTone"},
953 { 196, "DenialToneBurst"},
954 { 197, "DialToneBurst"},
955 { 250, "IncomingAdditionalCallTone"},
956 { 251, "PriorityAdditionalCallTone"},
957 { 0, NULL }
959 /* Class (octet 2, bits A-D) */
960 static const value_string ansi_map_AnnouncementCode_class_vals[] = {
961 { 0, "Concurrent"},
962 { 1, "Sequential"},
963 { 0, NULL }
965 /* Standard Announcement (octet 3) Updated with N.S0015 */
966 static const value_string ansi_map_AnnouncementCode_std_ann_vals[] = {
967 { 0, "None"},
968 { 1, "UnauthorizedUser"},
969 { 2, "InvalidESN"},
970 { 3, "UnauthorizedMobile"},
971 { 4, "SuspendedOrigination"},
972 { 5, "OriginationDenied"},
973 { 6, "ServiceAreaDenial"},
974 { 16, "PartialDial"},
975 { 17, "Require1Plus"},
976 { 18, "Require1PlusNPA"},
977 { 19, "Require0Plus"},
978 { 20, "Require0PlusNPA"},
979 { 21, "Deny1Plus"},
980 { 22, "Unsupported10plus"},
981 { 23, "Deny10plus"},
982 { 24, "Unsupported10XXX"},
983 { 25, "Deny10XXX"},
984 { 26, "Deny10XXXLocally"},
985 { 27, "Require10Plus"},
986 { 28, "RequireNPA"},
987 { 29, "DenyTollOrigination"},
988 { 30, "DenyInternationalOrigination"},
989 { 31, "Deny0Minus"},
990 { 48, "DenyNumber"},
991 { 49, "AlternateOperatorServices"},
992 { 64, "No Circuit or AllCircuitsBusy or FacilityProblem"},
993 { 65, "Overload"},
994 { 66, "InternalOfficeFailure"},
995 { 67, "NoWinkReceived"},
996 { 68, "InterofficeLinkFailure"},
997 { 69, "Vacant"},
998 { 70, "InvalidPrefix or InvalidAccessCode"},
999 { 71, "OtherDialingIrregularity"},
1000 { 80, "VacantNumber or DisconnectedNumber"},
1001 { 81, "DenyTermination"},
1002 { 82, "SuspendedTermination"},
1003 { 83, "ChangedNumber"},
1004 { 84, "InaccessibleSubscriber"},
1005 { 85, "DenyIncomingTol"},
1006 { 86, "RoamerAccessScreening"},
1007 { 87, "RefuseCall"},
1008 { 88, "RedirectCall"},
1009 { 89, "NoPageResponse"},
1010 { 90, "NoAnswer"},
1011 { 96, "RoamerIntercept"},
1012 { 97, "GeneralInformation"},
1013 { 112, "UnrecognizedFeatureCode"},
1014 { 113, "UnauthorizedFeatureCode"},
1015 { 114, "RestrictedFeatureCode"},
1016 { 115, "InvalidModifierDigits"},
1017 { 116, "SuccessfulFeatureRegistration"},
1018 { 117, "SuccessfulFeatureDeRegistration"},
1019 { 118, "SuccessfulFeatureActivation"},
1020 { 119, "SuccessfulFeatureDeActivation"},
1021 { 120, "InvalidForwardToNumber"},
1022 { 121, "CourtesyCallWarning"},
1023 { 128, "EnterPINSendPrompt"},
1024 { 129, "EnterPINPrompt"},
1025 { 130, "ReEnterPINSendPrompt"},
1026 { 131, "ReEnterPINPrompt"},
1027 { 132, "EnterOldPINSendPrompt"},
1028 { 133, "EnterOldPINPrompt"},
1029 { 134, "EnterNewPINSendPrompt"},
1030 { 135, "EnterNewPINPrompt"},
1031 { 136, "ReEnterNewPINSendPrompt"},
1032 { 137, "ReEnterNewPINPrompt"},
1033 { 138, "EnterPasswordPrompt"},
1034 { 139, "EnterDirectoryNumberPrompt"},
1035 { 140, "ReEnterDirectoryNumberPrompt"},
1036 { 141, "EnterFeatureCodePrompt"},
1037 { 142, "EnterEnterCreditCardNumberPrompt"},
1038 { 143, "EnterDestinationNumberPrompt"},
1039 { 152, "PPCInsufficientAccountBalance"},
1040 { 153, "PPCFiveMinuteWarning"},
1041 { 154, "PPCThreeMinuteWarning"},
1042 { 155, "PPCTwoMinuteWarning"},
1043 { 156, "PPCOneMinuteWarning"},
1044 { 157, "PPCDisconnect"},
1045 { 158, "PPCRedirect"},
1046 { 0, NULL }
1051 static void
1052 dissect_ansi_map_announcementcode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1054 int offset = 0;
1056 proto_tree *subtree;
1059 subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
1061 /* Tone (octet 1) */
1062 proto_tree_add_item(subtree, hf_ansi_map_announcementcode_tone, tvb, offset, 1, ENC_BIG_ENDIAN);
1063 offset++;
1064 /* Class (octet 2, bits A-D) */
1065 proto_tree_add_item(subtree, hf_ansi_map_announcementcode_class, tvb, offset, 1, ENC_BIG_ENDIAN);
1066 offset++;
1067 /* Standard Announcement (octet 3) */
1068 proto_tree_add_item(subtree, hf_ansi_map_announcementcode_std_ann, tvb, offset, 1, ENC_BIG_ENDIAN);
1069 offset++;
1070 /* Custom Announcement ( octet 4 )
1071 e. The assignment of this octet is left to bilateral agreement. When a Custom
1072 Announcement is specified it takes precedence over either the Standard
1073 Announcement or Tone
1075 proto_tree_add_item(subtree, hf_ansi_map_announcementcode_cust_ann, tvb, offset, 1, ENC_BIG_ENDIAN);
1078 /* 6.5.2.8 AuthenticationCapability Updated N.S0003*/
1079 static const value_string ansi_map_AuthenticationCapability_vals[] = {
1080 { 0, "Not used"},
1081 { 1, "No authentication required"},
1082 { 2, "Authentication required"},
1083 { 128, "Authentication required and UIM capable."},
1084 { 0, NULL }
1087 /* 6.5.2.14 AuthorizationPeriod*/
1089 /* Period (octet 1) */
1090 static const value_string ansi_map_authorizationperiod_period_vals[] = {
1091 { 0, "Not used"},
1092 { 1, "Per Call"},
1093 { 2, "Hours"},
1094 { 3, "Days"},
1095 { 4, "Weeks"},
1096 { 5, "Per Agreement"},
1097 { 6, "Indefinite (i.e., authorized until canceled or deregistered)"},
1098 { 7, "Number of calls. Re-authorization should be attempted after this number of (rejected) call attempts"},
1099 { 0, NULL }
1101 /* Value (octet 2)
1102 Number of minutes hours, days, weeks, or
1103 number of calls (as per Period). If Period
1104 indicates anything else the Value is set to zero
1105 on sending and ignored on receipt.
1107 static void
1108 dissect_ansi_map_authorizationperiod(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1110 int offset = 0;
1112 proto_tree *subtree;
1115 subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
1116 proto_tree_add_item(subtree, hf_ansi_map_authorizationperiod_period, tvb, offset, 1, ENC_BIG_ENDIAN);
1117 offset++;
1118 proto_tree_add_item(subtree, hf_ansi_map_value, tvb, offset, 1, ENC_BIG_ENDIAN);
1121 /* 6.5.2.15 AvailabilityType */
1122 static const value_string ansi_map_AvailabilityType_vals[] = {
1123 { 0, "Not used"},
1124 { 1, "Unspecified MS inactivity type"},
1125 { 0, NULL }
1128 /* 6.5.2.16 BillingID */
1129 static void
1130 dissect_ansi_map_billingid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1132 int offset = 0;
1134 proto_tree *subtree;
1137 subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
1139 proto_tree_add_item(subtree, hf_ansi_map_MarketID, tvb, offset, 2, ENC_BIG_ENDIAN);
1140 offset = offset + 2;
1141 proto_tree_add_item(subtree, hf_ansi_map_swno, tvb, offset, 1, ENC_BIG_ENDIAN);
1142 offset++;
1143 /* ID Number */
1144 proto_tree_add_item(subtree, hf_ansi_map_idno, tvb, offset, 3, ENC_BIG_ENDIAN);
1145 offset = offset + 3;
1146 proto_tree_add_item(subtree, hf_ansi_map_segcount, tvb, offset, 1, ENC_BIG_ENDIAN);
1151 /* 6.5.2.20 CallingFeaturesIndicator */
1152 static const value_string ansi_map_FeatureActivity_vals[] = {
1153 { 0, "Not used"},
1154 { 1, "Not authorized"},
1155 { 2, "Authorized but de-activated"},
1156 { 3, "Authorized and activated"},
1157 { 0, NULL }
1161 static void
1162 dissect_ansi_map_callingfeaturesindicator(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1163 int offset = 0;
1164 int length;
1166 proto_tree *subtree;
1168 length = tvb_length_remaining(tvb,offset);
1170 subtree = proto_item_add_subtree(actx->created_item, ett_mscid);
1172 /* Call Waiting: FeatureActivity, CW-FA (Octet 1 bits GH ) */
1173 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cwfa, tvb, offset, 1, ENC_BIG_ENDIAN);
1174 /* Call Forwarding No Answer FeatureActivity, CFNA-FA (Octet 1 bits EF ) */
1175 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cfnafa, tvb, offset, 1, ENC_BIG_ENDIAN);
1176 /* Call Forwarding Busy FeatureActivity, CFB-FA (Octet 1 bits CD ) */
1177 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cfbfa, tvb, offset, 1, ENC_BIG_ENDIAN);
1178 /* Call Forwarding Unconditional FeatureActivity, CFU-FA (Octet 1 bits AB ) */
1179 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cfufa, tvb, offset, 1, ENC_BIG_ENDIAN);
1180 offset++;
1181 length--;
1183 /* Call Transfer: FeatureActivity, CT-FA (Octet 2 bits GH ) */
1184 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_ctfa, tvb, offset, 1, ENC_BIG_ENDIAN);
1185 /* Voice Privacy FeatureActivity, VP-FA (Octet 2 bits EF ) */
1186 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_vpfa, tvb, offset, 1, ENC_BIG_ENDIAN);
1187 /* Call Delivery: FeatureActivity (not interpreted on reception by IS-41-C or later)
1188 CD-FA (Octet 2 bits CD ) */
1189 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cdfa, tvb, offset, 1, ENC_BIG_ENDIAN);
1190 /* Three-Way Calling FeatureActivity, 3WC-FA (Octet 2 bits AB ) */
1191 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_3wcfa, tvb, offset, 1, ENC_BIG_ENDIAN);
1192 offset++;
1193 length--;
1196 /* Calling Number Identification Restriction Override FeatureActivity CNIROver-FA (Octet 3 bits GH ) */
1197 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cniroverfa, tvb, offset, 1, ENC_BIG_ENDIAN);
1198 /* Calling Number Identification Restriction: FeatureActivity CNIR-FA (Octet 3 bits EF ) */
1199 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cnirfa, tvb, offset, 1, ENC_BIG_ENDIAN);
1200 /* Calling Number Identification Presentation: FeatureActivity CNIP2-FA (Octet 3 bits CD ) */
1201 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cnip2fa, tvb, offset, 1, ENC_BIG_ENDIAN);
1202 /* Calling Number Identification Presentation: FeatureActivity CNIP1-FA (Octet 3 bits AB ) */
1203 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cnip1fa, tvb, offset, 1, ENC_BIG_ENDIAN);
1204 length--;
1205 if ( length == 0)
1206 return;
1207 offset++;
1209 /* USCF divert to voice mail: FeatureActivity USCFvm-FA (Octet 4 bits GH ) */
1210 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_uscfvmfa, tvb, offset, 1, ENC_BIG_ENDIAN);
1211 /* Answer Hold: FeatureActivity AH-FA (Octet 4 bits EF ) N.S0029-0 v1.0 */
1212 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_ahfa, tvb, offset, 1, ENC_BIG_ENDIAN);
1213 /* Data Privacy Feature Activity DP-FA (Octet 4 bits CD ) N.S0008-0 v 1.0 */
1214 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_dpfa, tvb, offset, 1, ENC_BIG_ENDIAN);
1215 /* Priority Call Waiting FeatureActivity PCW-FA (Octet 4 bits AB ) */
1216 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_pcwfa, tvb, offset, 1, ENC_BIG_ENDIAN);
1217 length--;
1218 if ( length == 0)
1219 return;
1220 offset++;
1222 /* USCF divert to mobile station provided DN:FeatureActivity.USCFms-FA (Octet 5 bits AB ) */
1223 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_uscfmsfa, tvb, offset, 1, ENC_BIG_ENDIAN);
1224 /* USCF divert to network registered DN:FeatureActivity. USCFnr-FA (Octet 5 bits CD )*/
1225 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_uscfnrfa, tvb, offset, 1, ENC_BIG_ENDIAN);
1226 /* CDMA-Packet Data Service: FeatureActivity. CPDS-FA (Octet 5 bits EF ) N.S0029-0 v1.0*/
1227 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_cpdsfa, tvb, offset, 1, ENC_BIG_ENDIAN);
1228 /* CDMA-Concurrent Service:FeatureActivity. CCS-FA (Octet 5 bits GH ) N.S0029-0 v1.0*/
1229 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_ccsfa, tvb, offset, 1, ENC_BIG_ENDIAN);
1230 length--;
1231 if ( length == 0)
1232 return;
1233 offset++;
1235 /* TDMA Enhanced Privacy and Encryption:FeatureActivity.TDMA EPE-FA (Octet 6 bits AB ) N.S0029-0 v1.0*/
1236 proto_tree_add_item(subtree, hf_ansi_map_callingfeaturesindicator_epefa, tvb, offset, 1, ENC_BIG_ENDIAN);
1240 /* 6.5.2.27 CancellationType */
1241 static const value_string ansi_map_CancellationType_vals[] = {
1242 { 0, "Not used"},
1243 { 1, "ServingSystemOption"},
1244 { 2, "ReportInCall."},
1245 { 3, "Discontinue"},
1246 { 0, NULL }
1249 /* 6.5.2.29 CDMACallMode Updated with N.S0029-0 v1.0*/
1250 /* Call Mode (octet 1, bit A) */
1251 static const true_false_string ansi_map_CDMACallMode_cdma_bool_val = {
1252 "CDMA 800 MHz channel (Band Class 0) acceptable.",
1253 "CDMA 800 MHz channel (Band Class 0) not acceptable"
1255 /* Call Mode (octet 1, bit B) */
1256 static const true_false_string ansi_map_CallMode_amps_bool_val = {
1257 "AAMPS 800 MHz channel acceptable",
1258 "AMPS 800 MHz channel not acceptable"
1260 /* Call Mode (octet 1, bit C) */
1261 static const true_false_string ansi_map_CallMode_namps_bool_val = {
1262 "NAMPS 800 MHz channel acceptable",
1263 "NAMPS 800 MHz channel not acceptable"
1265 /* Call Mode (octet 1, bit D) */
1266 static const true_false_string ansi_map_CDMACallMode_cls1_bool_val = {
1267 "CDMA 1900 MHz channel (Band Class 1) acceptable.",
1268 "CDMA 1900 MHz channel (Band Class 1) not acceptable"
1270 /* Call Mode (octet 1, bit E) */
1271 static const true_false_string ansi_map_CDMACallMode_cls2_bool_val = {
1272 "TACS channel (Band Class 2) acceptable",
1273 "TACS channel (Band Class 2) not acceptable"
1275 /* Call Mode (octet 1, bit F) */
1276 static const true_false_string ansi_map_CDMACallMode_cls3_bool_val = {
1277 "JTACS channel (Band Class 3) acceptable",
1278 "JTACS channel (Band Class 3) not acceptable"
1280 /* Call Mode (octet 1, bit G) */
1281 static const true_false_string ansi_map_CDMACallMode_cls4_bool_val = {
1282 "Korean PCS channel (Band Class 4) acceptable",
1283 "Korean PCS channel (Band Class 4) not acceptable"
1285 /* Call Mode (octet 1, bit H) */
1286 static const true_false_string ansi_map_CDMACallMode_cls5_bool_val = {
1287 "450 MHz channel (Band Class 5) not acceptable",
1288 "450 MHz channel (Band Class 5) not acceptable"
1290 /* Call Mode (octet 2, bit A) */
1291 static const true_false_string ansi_map_CDMACallMode_cls6_bool_val = {
1292 "2 GHz channel (Band Class 6) acceptable.",
1293 "2 GHz channel (Band Class 6) not acceptable."
1296 /* Call Mode (octet 2, bit B) */
1297 static const true_false_string ansi_map_CDMACallMode_cls7_bool_val = {
1298 "700 MHz channel (Band Class 7) acceptable",
1299 "700 MHz channel (Band Class 7) not acceptable"
1302 /* Call Mode (octet 2, bit C) */
1303 static const true_false_string ansi_map_CDMACallMode_cls8_bool_val = {
1304 "1800 MHz channel (Band Class 8) acceptable",
1305 "1800 MHz channel (Band Class 8) not acceptable"
1307 /* Call Mode (octet 2, bit D) */
1308 static const true_false_string ansi_map_CDMACallMode_cls9_bool_val = {
1309 "900 MHz channel (Band Class 9) acceptable",
1310 "900 MHz channel (Band Class 9) not acceptable"
1312 /* Call Mode (octet 2, bit E) */
1313 static const true_false_string ansi_map_CDMACallMode_cls10_bool_val = {
1314 "Secondary 800 MHz channel (Band Class 10) acceptable.",
1315 "Secondary 800 MHz channel (Band Class 10) not acceptable."
1318 static void
1319 dissect_ansi_map_cdmacallmode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1320 int offset = 0;
1321 int length;
1323 proto_tree *subtree;
1325 length = tvb_length_remaining(tvb,offset);
1328 subtree = proto_item_add_subtree(actx->created_item, ett_mscid);
1329 /* Call Mode (octet 1, bit H) */
1330 proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls5, tvb, offset, 1, ENC_BIG_ENDIAN);
1331 /* Call Mode (octet 1, bit G) */
1332 proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls4, tvb, offset, 1, ENC_BIG_ENDIAN);
1333 /* Call Mode (octet 1, bit F) */
1334 proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls3, tvb, offset, 1, ENC_BIG_ENDIAN);
1335 /* Call Mode (octet 1, bit E) */
1336 proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls2, tvb, offset, 1, ENC_BIG_ENDIAN);
1337 /* Call Mode (octet 1, bit D) */
1338 proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls1, tvb, offset, 1, ENC_BIG_ENDIAN);
1339 /* Call Mode (octet 1, bit C) */
1340 proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_namps, tvb, offset, 1, ENC_BIG_ENDIAN);
1341 /* Call Mode (octet 1, bit B) */
1342 proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_amps, tvb, offset, 1, ENC_BIG_ENDIAN);
1343 /* Call Mode (octet 1, bit A) */
1344 proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cdma, tvb, offset, 1, ENC_BIG_ENDIAN);
1346 length--;
1347 if ( length == 0)
1348 return;
1349 offset++;
1351 /* Call Mode (octet 2, bit E) */
1352 proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls10, tvb, offset, 1, ENC_BIG_ENDIAN);
1353 /* Call Mode (octet 2, bit D) */
1354 proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls9, tvb, offset, 1, ENC_BIG_ENDIAN);
1355 /* Call Mode (octet 2, bit C) */
1356 proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls8, tvb, offset, 1, ENC_BIG_ENDIAN);
1357 /* Call Mode (octet 2, bit B) */
1358 proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls7, tvb, offset, 1, ENC_BIG_ENDIAN);
1359 /* Call Mode (octet 2, bit A) */
1360 proto_tree_add_item(subtree, hf_ansi_map_cdmacallmode_cls6, tvb, offset, 1, ENC_BIG_ENDIAN);
1363 /* 6.5.2.30 CDMAChannelData */
1364 /* Updated with N.S0010-0 v 1.0 */
1366 static const value_string ansi_map_cdmachanneldata_band_cls_vals[] = {
1367 { 0, "800 MHz Cellular System"},
1368 { 0, NULL }
1371 static void
1372 dissect_ansi_map_cdmachanneldata(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1374 int offset = 0;
1375 int length;
1377 proto_tree *subtree;
1379 length = tvb_length_remaining(tvb,offset);
1382 subtree = proto_item_add_subtree(actx->created_item, ett_cdmachanneldata);
1384 proto_tree_add_item(subtree, hf_ansi_map_reservedBitH, tvb, offset, 1, ENC_BIG_ENDIAN);
1385 proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_Frame_Offset, tvb, offset, 1, ENC_BIG_ENDIAN);
1386 /* CDMA Channel Number */
1387 proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_CDMA_ch_no, tvb, offset, 2, ENC_BIG_ENDIAN);
1388 offset = offset + 2;
1389 length = length -2;
1390 /* Band Class */
1391 proto_tree_add_item(subtree, hf_ansi_map_reservedBitH, tvb, offset, 1, ENC_BIG_ENDIAN);
1392 proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_band_cls, tvb, offset, 1, ENC_BIG_ENDIAN);
1393 /* Long Code Mask */
1394 proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_lc_mask_b6, tvb, offset, 1, ENC_BIG_ENDIAN);
1395 offset++;
1396 proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_lc_mask_b5, tvb, offset, 1, ENC_BIG_ENDIAN);
1397 offset++;
1398 proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_lc_mask_b4, tvb, offset, 1, ENC_BIG_ENDIAN);
1399 offset++;
1400 proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_lc_mask_b3, tvb, offset, 1, ENC_BIG_ENDIAN);
1401 offset++;
1402 proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_lc_mask_b2, tvb, offset, 1, ENC_BIG_ENDIAN);
1403 offset++;
1404 proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_lc_mask_b1, tvb, offset, 1, ENC_BIG_ENDIAN);
1405 length = length - 6;
1406 if (length == 0)
1407 return;
1408 offset++;
1409 /* NP_EXT */
1410 proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_np_ext, tvb, offset, 1, ENC_BIG_ENDIAN);
1411 /* Nominal Power */
1412 proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_nominal_pwr, tvb, offset, 1, ENC_BIG_ENDIAN);
1413 /* Number Preamble */
1414 proto_tree_add_item(subtree, hf_ansi_map_cdmachanneldata_nr_preamble, tvb, offset, 1, ENC_BIG_ENDIAN);
1417 /* 6.5.2.31 CDMACodeChannel */
1419 /* 6.5.2.41 CDMAStationClassMark */
1420 /* Power Class: (PC) (octet 1, bits A and B) */
1421 static const value_string ansi_map_CDMAStationClassMark_pc_vals[] = {
1422 { 0, "Class I"},
1423 { 1, "Class II"},
1424 { 2, "Class III"},
1425 { 3, "Reserved"},
1426 { 0, NULL }
1428 /* Analog Transmission: (DTX) (octet 1, bit C) */
1429 static const true_false_string ansi_map_CDMAStationClassMark_dtx_bool_val = {
1430 "Discontinuous",
1431 "Continuous"
1433 /* Slotted Mode Indicator: (SMI) (octet 1, bit F) */
1434 static const true_false_string ansi_map_CDMAStationClassMark_smi_bool_val = {
1435 "Slotted capable",
1436 "Slotted incapable"
1438 /* Dual-mode Indicator(DMI) (octet 1, bit G) */
1439 static const true_false_string ansi_map_CDMAStationClassMark_dmi_bool_val = {
1440 "Dual-mode CDMA",
1441 "CDMA only"
1445 static void
1446 dissect_ansi_map_cdmastationclassmark(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1447 int offset = 0;
1449 proto_tree *subtree;
1452 subtree = proto_item_add_subtree(actx->created_item, ett_cdmastationclassmark);
1454 proto_tree_add_item(subtree, hf_ansi_map_reservedBitH, tvb, offset, 1, ENC_BIG_ENDIAN);
1455 /* Dual-mode Indicator(DMI) (octet 1, bit G) */
1456 proto_tree_add_item(subtree, hf_ansi_map_cdmastationclassmark_dmi, tvb, offset, 1, ENC_BIG_ENDIAN);
1457 /* Slotted Mode Indicator: (SMI) (octet 1, bit F) */
1458 proto_tree_add_item(subtree, hf_ansi_map_cdmastationclassmark_smi, tvb, offset, 1, ENC_BIG_ENDIAN);
1459 proto_tree_add_item(subtree, hf_ansi_map_reservedBitED, tvb, offset, 1, ENC_BIG_ENDIAN);
1460 /* Analog Transmission: (DTX) (octet 1, bit C) */
1461 proto_tree_add_item(subtree, hf_ansi_map_cdmastationclassmark_dtx, tvb, offset, 1, ENC_BIG_ENDIAN);
1462 /* Power Class: (PC) (octet 1, bits A and B) */
1463 proto_tree_add_item(subtree, hf_ansi_map_cdmastationclassmark_pc, tvb, offset, 1, ENC_BIG_ENDIAN);
1465 /* 6.5.2.47 ChannelData */
1466 /* Discontinuous Transmission Mode (DTX) (octet 1, bits E and D) */
1467 static const value_string ansi_map_ChannelData_dtx_vals[] = {
1468 { 0, "DTX disabled"},
1469 { 1, "Reserved. Treat the same as value 00, DTX disabled."},
1470 { 2, "DTX-low mode"},
1471 { 3, "DTX mode active or acceptable"},
1472 { 0, NULL }
1476 static void
1477 dissect_ansi_map_channeldata(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1478 int offset = 0;
1480 proto_tree *subtree;
1483 subtree = proto_item_add_subtree(actx->created_item, ett_channeldata);
1485 /* SAT Color Code (SCC) (octet 1, bits H and G) */
1486 proto_tree_add_item(subtree, hf_ansi_map_channeldata_scc, tvb, offset, 1, ENC_BIG_ENDIAN);
1487 /* Discontinuous Transmission Mode (DTX) (octet 1, bits E and D) */
1488 proto_tree_add_item(subtree, hf_ansi_map_channeldata_dtx, tvb, offset, 1, ENC_BIG_ENDIAN);
1489 /* Voice Mobile Attenuation Code (VMAC) (octet 1, bits A - C)*/
1490 proto_tree_add_item(subtree, hf_ansi_map_channeldata_vmac, tvb, offset, 1, ENC_BIG_ENDIAN);
1492 offset++;
1493 /* Channel Number (CHNO) ( octet 2 and 3 ) */
1494 proto_tree_add_item(subtree, hf_ansi_map_channeldata_chno, tvb, offset, 2, ENC_BIG_ENDIAN);
1498 /* 6.5.2.50 ConfidentialityModes */
1499 /* Updated with N.S0008-0 v 1.0*/
1500 /* Voice Privacy (VP) Confidentiality Status (octet 1, bit A) */
1502 static const true_false_string ansi_map_ConfidentialityModes_bool_val = {
1503 "On",
1504 "Off"
1506 static void
1507 dissect_ansi_map_confidentialitymodes(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1508 int offset = 0;
1510 proto_tree *subtree;
1513 subtree = proto_item_add_subtree(actx->created_item, ett_confidentialitymodes);
1515 /* DataPrivacy (DP) Confidentiality Status (octet 1, bit C) */
1516 proto_tree_add_item(subtree, hf_ansi_map_ConfidentialityModes_dp, tvb, offset, 1, ENC_BIG_ENDIAN);
1517 /* Signaling Message Encryption (SE) Confidentiality Status (octet 1, bit B) */
1518 proto_tree_add_item(subtree, hf_ansi_map_ConfidentialityModes_se, tvb, offset, 1, ENC_BIG_ENDIAN);
1519 /* Voice Privacy (VP) Confidentiality Status (octet 1, bit A) */
1520 proto_tree_add_item(subtree, hf_ansi_map_ConfidentialityModes_vp, tvb, offset, 1, ENC_BIG_ENDIAN);
1524 /* 6.5.2.51 ControlChannelData */
1526 /* Digital Color Code (DCC) (octet 1, bit H and G) */
1527 /* Control Mobile Attenuation Code (CMAC) (octet 1, bit A - C) */
1528 /* Channel Number (CHNO) ( octet 2 and 3 ) */
1529 /* Supplementary Digital Color Codes (SDCC1 and SDCC2) */
1530 /* SDCC1 ( octet 4, bit D and C )*/
1531 /* SDCC2 ( octet 4, bit A and B )*/
1533 static void
1534 dissect_ansi_map_controlchanneldata(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1535 int offset = 0;
1537 proto_tree *subtree;
1540 subtree = proto_item_add_subtree(actx->created_item, ett_controlchanneldata);
1542 /* Digital Color Code (DCC) (octet 1, bit H and G) */
1543 proto_tree_add_item(subtree, hf_ansi_map_controlchanneldata_dcc, tvb, offset, 1, ENC_BIG_ENDIAN);
1544 proto_tree_add_item(subtree, hf_ansi_map_reservedBitFED, tvb, offset, 1, ENC_BIG_ENDIAN);
1545 /* Control Mobile Attenuation Code (CMAC) (octet 1, bit A - C) */
1546 proto_tree_add_item(subtree, hf_ansi_map_controlchanneldata_cmac, tvb, offset, 1, ENC_BIG_ENDIAN);
1547 offset++;
1548 /* Channel Number (CHNO) ( octet 2 and 3 ) */
1549 proto_tree_add_item(subtree, hf_ansi_map_controlchanneldata_chno, tvb, offset, 2, ENC_BIG_ENDIAN);
1550 /* Supplementary Digital Color Codes (SDCC1 and SDCC2) */
1551 offset = offset +2;
1552 /* SDCC1 ( octet 4, bit D and C )*/
1553 proto_tree_add_item(subtree, hf_ansi_map_controlchanneldata_sdcc1, tvb, offset, 1, ENC_BIG_ENDIAN);
1554 proto_tree_add_item(subtree, hf_ansi_map_reservedBitHGFE, tvb, offset, 1, ENC_BIG_ENDIAN);
1555 /* SDCC2 ( octet 4, bit A and B )*/
1556 proto_tree_add_item(subtree, hf_ansi_map_controlchanneldata_sdcc2, tvb, offset, 1, ENC_BIG_ENDIAN);
1560 /* 6.5.2.52 CountUpdateReport */
1561 static const value_string ansi_map_CountUpdateReport_vals[] = {
1562 { 0, "Class I"},
1563 { 1, "Class II"},
1564 { 2, "Class III"},
1565 { 3, "Reserved"},
1566 { 0, NULL }
1569 /* 6.5.2.53 DeniedAuthorizationPeriod */
1570 /* Period (octet 1) */
1571 static const value_string ansi_map_deniedauthorizationperiod_period_vals[] = {
1572 { 0, "Not used"},
1573 { 1, "Per Call. Re-authorization should be attempted on the next call attempt"},
1574 { 2, "Hours"},
1575 { 3, "Days"},
1576 { 4, "Weeks"},
1577 { 5, "Per Agreement"},
1578 { 6, "Reserved"},
1579 { 7, "Number of calls. Re-authorization should be attempted after this number of (rejected) call attempts"},
1580 { 8, "Minutes"},
1581 { 0, NULL }
1583 /* Value (octet 2)
1584 Number of minutes hours, days, weeks, or
1585 number of calls (as per Period). If Period
1586 indicates anything else the Value is set to zero
1587 on sending and ignored on receipt.
1590 static void
1591 dissect_ansi_map_deniedauthorizationperiod(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1593 int offset = 0;
1595 proto_tree *subtree;
1598 subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
1599 proto_tree_add_item(subtree, hf_ansi_map_deniedauthorizationperiod_period, tvb, offset, 1, ENC_BIG_ENDIAN);
1600 offset++;
1601 proto_tree_add_item(subtree, hf_ansi_map_value, tvb, offset, 1, ENC_BIG_ENDIAN);
1606 /* 6.5.2.57 DigitCollectionControl */
1607 /* TODO Add decoding here */
1609 /* 6.5.2.64 ExtendedMSCID */
1610 static const value_string ansi_map_msc_type_vals[] = {
1611 { 0, "Not specified"},
1612 { 1, "Serving MSC"},
1613 { 2, "Home MSC"},
1614 { 3, "Gateway MSC"},
1615 { 4, "HLR"},
1616 { 5, "VLR"},
1617 { 6, "EIR (reserved)"},
1618 { 7, "AC"},
1619 { 8, "Border MSC"},
1620 { 9, "Originating MSC"},
1621 { 0, NULL }
1624 static void
1625 dissect_ansi_map_extendedmscid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1627 int offset = 0;
1629 proto_tree *subtree;
1632 subtree = proto_item_add_subtree(actx->created_item, ett_extendedmscid);
1633 /* Type (octet 1) */
1634 proto_tree_add_item(subtree, hf_ansi_map_msc_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1635 offset++;
1636 proto_tree_add_item(subtree, hf_ansi_map_MarketID, tvb, offset, 2, ENC_BIG_ENDIAN);
1637 offset = offset + 2;
1638 proto_tree_add_item(subtree, hf_ansi_map_swno, tvb, offset, 1, ENC_BIG_ENDIAN);
1641 /* 6.5.2.65 ExtendedSystemMyTypeCode */
1642 static void
1643 dissect_ansi_map_extendedsystemmytypecode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx){
1645 int offset = 0;
1647 proto_tree *subtree;
1650 subtree = proto_item_add_subtree(actx->created_item, ett_extendedsystemmytypecode);
1651 /* Type (octet 1) */
1652 proto_tree_add_item(subtree, hf_ansi_map_msc_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1653 offset++;
1654 dissect_ansi_map_SystemMyTypeCode(TRUE, tvb, offset, actx, subtree, hf_ansi_map_systemMyTypeCode);
1658 /* 6.5.2.68 GeographicAuthorization */
1659 /* Geographic Authorization (octet 1) */
1660 static const value_string ansi_map_GeographicAuthorization_vals[] = {
1661 { 0, "Not used"},
1662 { 1, "Authorized for all MarketIDs served by the VLR"},
1663 { 2, "Authorized for this MarketID only"},
1664 { 3, "Authorized for this MarketID and Switch Number only"},
1665 { 4, "Authorized for this LocationAreaID within a MarketID only"},
1666 { 5, "VLR"},
1667 { 6, "EIR (reserved)"},
1668 { 7, "AC"},
1669 { 8, "Border MSC"},
1670 { 9, "Originating MSC"},
1671 { 0, NULL }
1674 /* 6.5.2.71 HandoffState */
1675 /* Party Involved (PI) (octet 1, bit A) */
1676 static const true_false_string ansi_map_HandoffState_pi_bool_val = {
1677 "Terminator is handing off",
1678 "Originator is handing off"
1680 static void
1681 dissect_ansi_map_handoffstate(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1683 int offset = 0;
1685 proto_tree *subtree;
1688 subtree = proto_item_add_subtree(actx->created_item, ett_handoffstate);
1689 /* Party Involved (PI) (octet 1, bit A) */
1690 proto_tree_add_item(subtree, hf_ansi_map_handoffstate_pi, tvb, offset, 1, ENC_BIG_ENDIAN);
1693 /* 6.5.2.72 InterMSCCircuitID */
1694 /* Trunk Member Number (M) Octet2 */
1695 static void
1696 dissect_ansi_map_intermsccircuitid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1698 int offset = 0;
1700 proto_tree *subtree;
1701 guint8 octet, octet2;
1704 subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
1705 /* Trunk Group Number (G) Octet 1 */
1706 octet = tvb_get_guint8(tvb,offset);
1707 proto_tree_add_item(subtree, hf_ansi_map_tgn, tvb, offset, 1, ENC_BIG_ENDIAN);
1708 offset++;
1709 /* Trunk Member Number (M) Octet2 */
1710 octet2 = tvb_get_guint8(tvb,offset);
1711 proto_tree_add_item(subtree, hf_ansi_map_tmn, tvb, offset, 1, ENC_BIG_ENDIAN);
1712 proto_item_append_text(actx->created_item, " (G %u/M %u)", octet, octet2);
1715 /* 6.5.2.78 MessageWaitingNotificationCount */
1716 /* Type of messages (octet 1) */
1717 static const value_string ansi_map_MessageWaitingNotificationCount_type_vals[] = {
1718 { 0, "Voice messages"},
1719 { 1, "Short Message Services (SMS) messages"},
1720 { 2, "Group 3 (G3) Fax messages"},
1721 { 0, NULL }
1724 static void
1725 dissect_ansi_map_messagewaitingnotificationcount(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1727 int offset = 0;
1729 proto_tree *subtree;
1732 subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
1733 /* Type of messages (octet 1) */
1734 proto_tree_add_item(subtree, hf_ansi_map_messagewaitingnotificationcount_tom, tvb, offset, 1, ENC_BIG_ENDIAN);
1735 offset++;
1736 /* Number of Messages Waiting (octet 2) */
1737 proto_tree_add_item(subtree, hf_ansi_map_messagewaitingnotificationcount_no_mw, tvb, offset, 1, ENC_BIG_ENDIAN);
1741 #if 0
1742 /* 6.5.2.79 MessageWaitingNotificationType */
1743 /* Pip Tone (PT) (octet 1, bit A) */
1744 static const true_false_string ansi_map_MessageWaitingNotificationType_pt_bool_val = {
1745 "Pip Tone (PT) notification is required",
1746 "Pip Tone (PT) notification is not authorized or no notification is required"
1748 #endif
1749 #if 0
1750 /* Alert Pip Tone (APT) (octet 1, bit B) */
1751 static const true_false_string ansi_map_MessageWaitingNotificationType_apt_bool_val = {
1752 "Alert Pip Tone (APT) notification is required",
1753 "Alert Pip Tone (APT) notification is not authorized or notification is not required"
1755 #endif
1756 /* Message Waiting Indication (MWI) (octet 1, bits C and D) */
1757 static const value_string ansi_map_MessageWaitingNotificationType_mwi_vals[] = {
1758 { 0, "No MWI. Message Waiting Indication (MWI) notification is not authorized or notification is not required"},
1759 { 1, "Reserved"},
1760 { 2, "MWI On. Message Waiting Indication (MWI) notification is required. Messages waiting"},
1761 { 3, "MWI Off. Message Waiting Indication (MWI) notification is required. No messages waiting"},
1762 { 0, NULL }
1765 static void
1766 dissect_ansi_map_messagewaitingnotificationtype(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1768 int offset = 0;
1770 proto_tree *subtree;
1773 subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
1775 /* Message Waiting Indication (MWI) (octet 1, bits C and D) */
1776 proto_tree_add_item(subtree, hf_ansi_map_messagewaitingnotificationtype_mwi, tvb, offset, 1, ENC_BIG_ENDIAN);
1777 /* Alert Pip Tone (APT) (octet 1, bit B) */
1778 proto_tree_add_item(subtree, hf_ansi_map_messagewaitingnotificationtype_apt, tvb, offset, 1, ENC_BIG_ENDIAN);
1779 /* Pip Tone (PT) (octet 1, bit A) */
1780 proto_tree_add_item(subtree, hf_ansi_map_messagewaitingnotificationtype_pt, tvb, offset, 1, ENC_BIG_ENDIAN);
1783 /* 6.5.2.81 MobileIdentificationNumber */
1785 /* 6.5.2.82 MSCID */
1787 static void
1788 dissect_ansi_map_mscid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1789 int offset = 0;
1791 proto_tree *subtree;
1794 subtree = proto_item_add_subtree(actx->created_item, ett_mscid);
1796 proto_tree_add_item(subtree, hf_ansi_map_MarketID, tvb, offset, 2, ENC_BIG_ENDIAN);
1797 offset = offset + 2;
1798 proto_tree_add_item(subtree, hf_ansi_map_swno, tvb, offset, 1, ENC_BIG_ENDIAN);
1802 /* 6.5.2.84 MSLocation */
1803 static void
1804 dissect_ansi_map_mslocation(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1805 int offset = 0;
1807 proto_tree *subtree;
1810 subtree = proto_item_add_subtree(actx->created_item, ett_mscid);
1812 /* Latitude in tenths of a second octet 1 - 3 */
1813 proto_tree_add_item(subtree, hf_ansi_map_mslocation_lat, tvb, offset, 3, ENC_BIG_ENDIAN);
1814 offset = offset + 3;
1815 /* Longitude in tenths of a second octet 4 - 6 */
1816 proto_tree_add_item(subtree, hf_ansi_map_mslocation_long, tvb, offset, 3, ENC_BIG_ENDIAN);
1817 offset = offset + 3;
1818 /* Resolution in units of 1 foot octet 7, octet 8 optional */
1819 proto_tree_add_item(subtree, hf_ansi_map_mslocation_res, tvb, offset, -1, ENC_BIG_ENDIAN);
1822 /* 6.5.2.85 NAMPSCallMode */
1823 static void
1824 dissect_ansi_map_nampscallmode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1825 int offset = 0;
1826 proto_tree *subtree;
1829 subtree = proto_item_add_subtree(actx->created_item, ett_mscid);
1831 /* Call Mode (octet 1, bits A and B) */
1832 proto_tree_add_item(subtree, hf_ansi_map_nampscallmode_amps, tvb, offset, 1, ENC_BIG_ENDIAN);
1833 proto_tree_add_item(subtree, hf_ansi_map_nampscallmode_namps, tvb, offset, 1, ENC_BIG_ENDIAN);
1836 /* 6.5.2.86 NAMPSChannelData */
1837 /* Narrow Analog Voice Channel Assignment (NAVCA) (octet 1, bits A and B) */
1838 static const value_string ansi_map_NAMPSChannelData_navca_vals[] = {
1839 { 0, "Wide. 30 kHz AMPS voice channel"},
1840 { 1, "Upper. 10 kHz NAMPS voice channel"},
1841 { 2, "Middle. 10 kHz NAMPS voice channel"},
1842 { 3, "Lower. 10 kHz NAMPS voice channel"},
1843 { 0, NULL }
1845 /* Color Code Indicator (CCIndicator) (octet 1, bits C, D, and E) */
1846 static const value_string ansi_map_NAMPSChannelData_ccinidicator_vals[] = {
1847 { 0, "ChannelData parameter SCC field applies"},
1848 { 1, "Digital SAT Color Code 1 (ignore SCC field)"},
1849 { 2, "Digital SAT Color Code 2 (ignore SCC field)"},
1850 { 3, "Digital SAT Color Code 3 (ignore SCC field)"},
1851 { 4, "Digital SAT Color Code 4 (ignore SCC field)"},
1852 { 5, "Digital SAT Color Code 5 (ignore SCC field)"},
1853 { 6, "Digital SAT Color Code 6 (ignore SCC field)"},
1854 { 7, "Digital SAT Color Code 7 (ignore SCC field)"},
1855 { 0, NULL }
1860 static void
1861 dissect_ansi_map_nampschanneldata(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1862 int offset = 0;
1863 proto_tree *subtree;
1866 subtree = proto_item_add_subtree(actx->created_item, ett_mscid);
1868 /* Color Code Indicator (CCIndicator) (octet 1, bits C, D, and E) */
1869 proto_tree_add_item(subtree, hf_ansi_map_nampschanneldata_CCIndicator, tvb, offset, 1, ENC_BIG_ENDIAN);
1870 /* Narrow Analog Voice Channel Assignment (NAVCA) (octet 1, bits A and B) */
1871 proto_tree_add_item(subtree, hf_ansi_map_nampschanneldata_navca, tvb, offset, 1, ENC_BIG_ENDIAN);
1875 #if 0
1876 /* 6.5.2.88 OneTimeFeatureIndicator */
1877 /* updated with N.S0012 */
1878 /* Call Waiting for Future Incoming Call (CWFI) (octet 1, bits A and B) */
1879 /* Call Waiting for Incoming Call (CWIC) (octet 1, bits C and D) */
1881 static const value_string ansi_map_onetimefeatureindicator_cw_vals[] = {
1882 { 0, "Ignore"},
1883 { 1, "No CW"},
1884 { 2, "Normal CW"},
1885 { 3, "Priority CW"},
1886 { 0, NULL }
1888 #endif
1889 #if 0
1890 /* MessageWaitingNotification (MWN) (octet 1, bits E and F) */
1891 static const value_string ansi_map_onetimefeatureindicator_mwn_vals[] = {
1892 { 0, "Ignore"},
1893 { 1, "Pip Tone Inactive"},
1894 { 2, "Pip Tone Active"},
1895 { 3, "Reserved"},
1896 { 0, NULL }
1898 #endif
1899 #if 0
1900 /* Calling Number Identification Restriction (CNIR) (octet 1, bits G and H)*/
1901 static const value_string ansi_map_onetimefeatureindicator_cnir_vals[] = {
1902 { 0, "Ignore"},
1903 { 1, "CNIR Inactive"},
1904 { 2, "CNIR Active"},
1905 { 3, "Reserved"},
1906 { 0, NULL }
1908 #endif
1910 #if 0
1911 /* Priority Access and Channel Assignment (PACA) (octet 2, bits A and B)*/
1912 static const value_string ansi_map_onetimefeatureindicator_paca_vals[] = {
1913 { 0, "Ignore"},
1914 { 1, "PACA Demand Inactive"},
1915 { 2, "PACA Demand Activated"},
1916 { 3, "Reserved"},
1917 { 0, NULL }
1919 #endif
1921 #if 0
1922 /* Flash Privileges (Flash) (octet 2, bits C and D) */
1923 static const value_string ansi_map_onetimefeatureindicator_flash_vals[] = {
1924 { 0, "Ignore"},
1925 { 1, "Flash Inactive"},
1926 { 2, "Flash Active"},
1927 { 3, "Reserved"},
1928 { 0, NULL }
1930 #endif
1931 #if 0
1932 /* Calling Name Restriction (CNAR) (octet 2, bits E and F) */
1933 static const value_string ansi_map_onetimefeatureindicator_cnar_vals[] = {
1934 { 0, "Ignore"},
1935 { 1, "Presentation Allowed"},
1936 { 2, "Presentation Restricted."},
1937 { 3, "Blocking Toggle"},
1938 { 0, NULL }
1940 #endif
1941 static void
1942 dissect_ansi_map_onetimefeatureindicator(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
1944 int offset = 0;
1945 proto_tree *subtree;
1948 subtree = proto_item_add_subtree(actx->created_item, ett_mscid);
1950 /* Calling Number Identification Restriction (CNIR) (octet 1, bits G and H)*/
1951 /* MessageWaitingNotification (MWN) (octet 1, bits E and F) */
1952 /* Call Waiting for Incoming Call (CWIC) (octet 1, bits C and D) */
1953 /* Call Waiting for Future Incoming Call (CWFI) (octet 1, bits A and B) */
1954 /*offset++;*/
1955 /* Calling Name Restriction (CNAR) (octet 2, bits E and F) */
1956 /* Flash Privileges (Flash) (octet 2, bits C and D) */
1957 /* Priority Access and Channel Assignment (PACA) (octet 2, bits A and B)*/
1962 /* 6.5.2.90 OriginationTriggers */
1963 /* All Origination (All) (octet 1, bit A) */
1964 static const true_false_string ansi_map_originationtriggers_all_bool_val = {
1965 "Launch an OriginationRequest for any call attempt. This overrides all other values",
1966 "Trigger is not active"
1969 /* Local (octet 1, bit B) */
1970 static const true_false_string ansi_map_originationtriggers_local_bool_val = {
1971 "Launch an OriginationRequest for any local call attempt",
1972 "Trigger is not active"
1975 /* Intra-LATA Toll (ILATA) (octet 1, bit C) */
1976 static const true_false_string ansi_map_originationtriggers_ilata_bool_val = {
1977 "Launch an OriginationRequest for any intra-LATA call attempt",
1978 "Trigger is not active"
1980 /* Inter-LATA Toll (OLATA) (octet 1, bit D) */
1981 static const true_false_string ansi_map_originationtriggers_olata_bool_val = {
1982 "Launch an OriginationRequest for any inter-LATA toll call attempt",
1983 "Trigger is not active"
1985 /* International (Int'l ) (octet 1, bit E) */
1986 static const true_false_string ansi_map_originationtriggers_int_bool_val = {
1987 "Launch an OriginationRequest for any international call attempt",
1988 "Trigger is not active"
1990 /* World Zone (WZ) (octet 1, bit F) */
1991 static const true_false_string ansi_map_originationtriggers_wz_bool_val = {
1992 "Launch an OriginationRequest for any call attempt outside of the current World Zone (as defined in ITU-T Rec. E.164)",
1993 "Trigger is not active"
1996 /* Unrecognized Number (Unrec) (octet 1, bit G) */
1997 static const true_false_string ansi_map_originationtriggers_unrec_bool_val = {
1998 "Launch an OriginationRequest for any call attempt to an unrecognized number",
1999 "Trigger is not active"
2001 /* Revertive Call (RvtC) (octet 1, bit H)*/
2002 static const true_false_string ansi_map_originationtriggers_rvtc_bool_val = {
2003 "Launch an OriginationRequest for any Revertive Call attempt",
2004 "Trigger is not active"
2007 /* Star (octet 2, bit A) */
2008 static const true_false_string ansi_map_originationtriggers_star_bool_val = {
2009 "Launch an OriginationRequest for any number beginning with a Star '*' digit",
2010 "Trigger is not active"
2013 /* Double Star (DS) (octet 2, bit B) */
2014 static const true_false_string ansi_map_originationtriggers_ds_bool_val = {
2015 "Launch an OriginationRequest for any number beginning with two Star '**' digits",
2016 "Trigger is not active"
2018 /* Pound (octet 2, bit C) */
2019 static const true_false_string ansi_map_originationtriggers_pound_bool_val = {
2020 "Launch an OriginationRequest for any number beginning with a Pound '#' digit",
2021 "Trigger is not active"
2023 /* Double Pound (DP) (octet 2, bit D) */
2024 static const true_false_string ansi_map_originationtriggers_dp_bool_val = {
2025 "Launch an OriginationRequest for any number beginning with two Pound '##' digits",
2026 "Trigger is not active"
2028 /* Prior Agreement (PA) (octet 2, bit E) */
2029 static const true_false_string ansi_map_originationtriggers_pa_bool_val = {
2030 "Launch an OriginationRequest for any number matching a criteria of a prior agreement",
2031 "Trigger is not active"
2034 /* No digits (octet 3, bit A) */
2035 static const true_false_string ansi_map_originationtriggers_nodig_bool_val = {
2036 "Launch an OriginationRequest for any call attempt with no digits",
2037 "Trigger is not active"
2040 /* 1 digit (octet 3, bit B) */
2041 static const true_false_string ansi_map_originationtriggers_onedig_bool_val = {
2042 "Launch an OriginationRequest for any call attempt with 1 digit",
2043 "Trigger is not active"
2045 /* 1 digit (octet 3, bit C) */
2046 static const true_false_string ansi_map_originationtriggers_twodig_bool_val = {
2047 "Launch an OriginationRequest for any call attempt with 2 digits",
2048 "Trigger is not active"
2050 /* 1 digit (octet 3, bit D) */
2051 static const true_false_string ansi_map_originationtriggers_threedig_bool_val = {
2052 "Launch an OriginationRequest for any call attempt with 3 digits",
2053 "Trigger is not active"
2055 /* 1 digit (octet 3, bit E) */
2056 static const true_false_string ansi_map_originationtriggers_fourdig_bool_val = {
2057 "Launch an OriginationRequest for any call attempt with 4 digits",
2058 "Trigger is not active"
2060 /* 1 digit (octet 3, bit F) */
2061 static const true_false_string ansi_map_originationtriggers_fivedig_bool_val = {
2062 "Launch an OriginationRequest for any call attempt with 5 digits",
2063 "Trigger is not active"
2065 /* 1 digit (octet 3, bit G) */
2066 static const true_false_string ansi_map_originationtriggers_sixdig_bool_val = {
2067 "Launch an OriginationRequest for any call attempt with 6 digits",
2068 "Trigger is not active"
2070 /* 1 digit (octet 3, bit H) */
2071 static const true_false_string ansi_map_originationtriggers_sevendig_bool_val = {
2072 "Launch an OriginationRequest for any call attempt with 7 digits",
2073 "Trigger is not active"
2075 /* 1 digit (octet 4, bit A) */
2076 static const true_false_string ansi_map_originationtriggers_eightdig_bool_val = {
2077 "Launch an OriginationRequest for any call attempt with 8 digits",
2078 "Trigger is not active"
2080 /* 1 digit (octet 4, bit B) */
2081 static const true_false_string ansi_map_originationtriggers_ninedig_bool_val = {
2082 "Launch an OriginationRequest for any call attempt with 9 digits",
2083 "Trigger is not active"
2085 /* 1 digit (octet 4, bit C) */
2086 static const true_false_string ansi_map_originationtriggers_tendig_bool_val = {
2087 "Launch an OriginationRequest for any call attempt with 10 digits",
2088 "Trigger is not active"
2090 /* 1 digit (octet 4, bit D) */
2091 static const true_false_string ansi_map_originationtriggers_elevendig_bool_val = {
2092 "Launch an OriginationRequest for any call attempt with 11 digits",
2093 "Trigger is not active"
2095 /* 1 digit (octet 4, bit E) */
2096 static const true_false_string ansi_map_originationtriggers_twelvedig_bool_val = {
2097 "Launch an OriginationRequest for any call attempt with 12 digits",
2098 "Trigger is not active"
2100 /* 1 digit (octet 4, bit F) */
2101 static const true_false_string ansi_map_originationtriggers_thirteendig_bool_val = {
2102 "Launch an OriginationRequest for any call attempt with 13 digits",
2103 "Trigger is not active"
2105 /* 1 digit (octet 4, bit G) */
2106 static const true_false_string ansi_map_originationtriggers_fourteendig_bool_val = {
2107 "Launch an OriginationRequest for any call attempt with 14 digits",
2108 "Trigger is not active"
2110 /* 1 digit (octet 4, bit H) */
2111 static const true_false_string ansi_map_originationtriggers_fifteendig_bool_val = {
2112 "Launch an OriginationRequest for any call attempt with 15 digits",
2113 "Trigger is not active"
2116 static void
2117 dissect_ansi_map_originationtriggers(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2119 int offset = 0;
2120 proto_tree *subtree;
2123 subtree = proto_item_add_subtree(actx->created_item, ett_originationtriggers);
2125 /* Revertive Call (RvtC) (octet 1, bit H)*/
2126 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_rvtc, tvb, offset, 1, ENC_BIG_ENDIAN);
2127 /* Unrecognized Number (Unrec) (octet 1, bit G) */
2128 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_unrec, tvb, offset, 1, ENC_BIG_ENDIAN);
2129 /* World Zone (WZ) (octet 1, bit F) */
2130 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_wz, tvb, offset, 1, ENC_BIG_ENDIAN);
2131 /* International (Int'l ) (octet 1, bit E) */
2132 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_int, tvb, offset, 1, ENC_BIG_ENDIAN);
2133 /* Inter-LATA Toll (OLATA) (octet 1, bit D) */
2134 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_olata, tvb, offset, 1, ENC_BIG_ENDIAN);
2135 /* Intra-LATA Toll (ILATA) (octet 1, bit C) */
2136 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_ilata, tvb, offset, 1, ENC_BIG_ENDIAN);
2137 /* Local (octet 1, bit B) */
2138 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_local, tvb, offset, 1, ENC_BIG_ENDIAN);
2139 /* All Origination (All) (octet 1, bit A) */
2140 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_all, tvb, offset, 1, ENC_BIG_ENDIAN);
2141 offset++;
2143 /*Prior Agreement (PA) (octet 2, bit E) */
2144 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_pa, tvb, offset, 1, ENC_BIG_ENDIAN);
2145 /* Double Pound (DP) (octet 2, bit D) */
2146 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_dp, tvb, offset, 1, ENC_BIG_ENDIAN);
2147 /* Pound (octet 2, bit C) */
2148 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_pound, tvb, offset, 1, ENC_BIG_ENDIAN);
2149 /* Double Star (DS) (octet 2, bit B) */
2150 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_ds, tvb, offset, 1, ENC_BIG_ENDIAN);
2151 /* Star (octet 2, bit A) */
2152 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_star, tvb, offset, 1, ENC_BIG_ENDIAN);
2153 offset++;
2155 /* 7 digit (octet 3, bit H) */
2156 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_sevendig, tvb, offset, 1, ENC_BIG_ENDIAN);
2157 /* 6 digit (octet 3, bit G) */
2158 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_sixdig, tvb, offset, 1, ENC_BIG_ENDIAN);
2159 /* 5 digit (octet 3, bit F) */
2160 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_fivedig, tvb, offset, 1, ENC_BIG_ENDIAN);
2161 /* 4 digit (octet 3, bit E) */
2162 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_fourdig, tvb, offset, 1, ENC_BIG_ENDIAN);
2163 /* 3 digit (octet 3, bit D) */
2164 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_threedig, tvb, offset, 1, ENC_BIG_ENDIAN);
2165 /* 2 digit (octet 3, bit C) */
2166 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_twodig, tvb, offset, 1, ENC_BIG_ENDIAN);
2167 /* 1 digit (octet 3, bit B) */
2168 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_onedig, tvb, offset, 1, ENC_BIG_ENDIAN);
2169 /* No digits (octet 3, bit A) */
2170 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_nodig, tvb, offset, 1, ENC_BIG_ENDIAN);
2171 offset++;
2173 /* 15 digit (octet 4, bit H) */
2174 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_fifteendig, tvb, offset, 1, ENC_BIG_ENDIAN);
2175 /* 14 digit (octet 4, bit G) */
2176 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_fourteendig, tvb, offset, 1, ENC_BIG_ENDIAN);
2177 /* 13 digit (octet 4, bit F) */
2178 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_thirteendig, tvb, offset, 1, ENC_BIG_ENDIAN);
2179 /* 12 digit (octet 4, bit E) */
2180 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_twelvedig, tvb, offset, 1, ENC_BIG_ENDIAN);
2181 /* 11 digit (octet 4, bit D) */
2182 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_elevendig, tvb, offset, 1, ENC_BIG_ENDIAN);
2183 /* 10 digit (octet 4, bit C) */
2184 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_tendig, tvb, offset, 1, ENC_BIG_ENDIAN);
2185 /* 9 digit (octet 4, bit B) */
2186 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_ninedig, tvb, offset, 1, ENC_BIG_ENDIAN);
2187 /* 8 digits (octet 4, bit A) */
2188 proto_tree_add_item(subtree, hf_ansi_map_originationtriggers_eightdig, tvb, offset, 1, ENC_BIG_ENDIAN);
2192 /* 6.5.2.91 PACAIndicator */
2194 /* Permanent Activation (PA) (octet 1, bit A) */
2195 static const true_false_string ansi_map_pacaindicator_pa_bool_val = {
2196 "PACA is permanently activated",
2197 "PACA is not permanently activated"
2200 static const value_string ansi_map_PACA_Level_vals[] = {
2201 { 0, "Not used"},
2202 { 1, "Priority Level. 1 This is the highest level"},
2203 { 2, "Priority Level 2"},
2204 { 3, "Priority Level 3"},
2205 { 4, "Priority Level 4"},
2206 { 5, "Priority Level 5"},
2207 { 6, "Priority Level 6"},
2208 { 7, "Priority Level 7"},
2209 { 8, "Priority Level 8"},
2210 { 9, "Priority Level 9"},
2211 { 10, "Priority Level 10"},
2212 { 11, "Priority Level 11"},
2213 { 12, "Priority Level 12"},
2214 { 13, "Priority Level 13"},
2215 { 14, "Priority Level 14"},
2216 { 15, "Priority Level 15"},
2217 { 0, NULL }
2220 static void
2221 dissect_ansi_map_pacaindicator(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2223 int offset = 0;
2224 proto_tree *subtree;
2227 subtree = proto_item_add_subtree(actx->created_item, ett_pacaindicator);
2228 /* PACA Level (octet 1, bits B-E) */
2229 proto_tree_add_item(subtree, hf_ansi_map_PACA_Level, tvb, offset, 1, ENC_BIG_ENDIAN);
2230 /* Permanent Activation (PA) (octet 1, bit A) */
2231 proto_tree_add_item(subtree, hf_ansi_map_pacaindicator_pa, tvb, offset, 1, ENC_BIG_ENDIAN);
2234 /* 6.5.2.92 PageIndicator */
2235 static const value_string ansi_map_PageIndicator_vals[] = {
2236 { 0, "Not used"},
2237 { 1, "Page"},
2238 { 2, "Listen only"},
2239 { 0, NULL }
2242 /* 6.5.2.93 PC_SSN */
2243 static void
2244 dissect_ansi_map_pc_ssn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2246 int offset = 0;
2247 proto_tree *subtree;
2248 guint8 b1,b2,b3,b4;
2251 subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
2252 /* Type (octet 1) */
2253 proto_tree_add_item(subtree, hf_ansi_map_msc_type, tvb, offset, 1, ENC_BIG_ENDIAN);
2254 offset++;
2255 /* Point Code Member Number octet 2 */
2256 b1 = tvb_get_guint8(tvb,offset);
2257 offset++;
2258 /* Point Code Cluster Number octet 3 */
2259 b2 = tvb_get_guint8(tvb,offset);
2260 offset++;
2261 /* Point Code Network Number octet 4 */
2262 b3 = tvb_get_guint8(tvb,offset);
2263 offset++;
2264 /* Subsystem Number (SSN) octet 5 */
2265 b4 = tvb_get_guint8(tvb,offset);
2266 proto_tree_add_text(subtree, tvb, offset-3, 4 , "Point Code %u-%u-%u SSN %u",
2267 b3, b2, b1, b4);
2270 /* 6.5.2.94 PilotBillingID */
2271 static void
2272 dissect_ansi_map_pilotbillingid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2274 int offset = 0;
2275 proto_tree *subtree;
2278 subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
2279 /* First Originating MarketID octet 1 and 2 */
2280 proto_tree_add_item(subtree, hf_ansi_map_MarketID, tvb, offset, 2, ENC_BIG_ENDIAN);
2281 offset = offset + 2;
2282 /* First Originating Switch Number octet 3*/
2283 proto_tree_add_item(subtree, hf_ansi_map_swno, tvb, offset, 1, ENC_BIG_ENDIAN);
2284 offset++;
2285 /* ID Number */
2286 proto_tree_add_item(subtree, hf_ansi_map_idno, tvb, offset, 3, ENC_BIG_ENDIAN);
2287 offset = offset + 3;
2288 proto_tree_add_item(subtree, hf_ansi_map_segcount, tvb, offset, 1, ENC_BIG_ENDIAN);
2291 /* 6.5.2.96 PreferredLanguageIndicator */
2292 static const value_string ansi_map_PreferredLanguageIndicator_vals[] = {
2293 { 0, "Unspecified"},
2294 { 1, "English"},
2295 { 2, "French"},
2296 { 3, "Spanish"},
2297 { 4, "German"},
2298 { 5, "Portuguese"},
2299 { 0, NULL }
2302 /* 6.5.2.106 ReceivedSignalQuality */
2303 /* a. This octet is encoded the same as octet 1 in the SignalQuality parameter (see
2304 6.5.2.121).
2306 /* 6.5.2.118 SetupResult */
2307 static const value_string ansi_map_SetupResult_vals[] = {
2308 { 0, "Not used"},
2309 { 1, "Unsuccessful"},
2310 { 2, "Successful"},
2311 { 0, NULL }
2313 /* 6.5.2.121 SignalQuality */
2314 /* TODO */
2316 /* 6.5.2.122 SMS_AccessDeniedReason (TIA/EIA-41.5-D, page 5-256)
2317 N.S0011-0 v 1.0
2319 static const value_string ansi_map_SMS_AccessDeniedReason_vals[] = {
2320 { 0, "Not used"},
2321 { 1, "Denied"},
2322 { 2, "Postponed"},
2323 { 3, "Unavailable"},
2324 { 4, "Invalid"},
2325 { 0, NULL }
2329 /* 6.5.2.125 SMS_CauseCode (TIA/EIA-41.5-D, page 5-262)
2330 N.S0011-0 v 1.0
2332 static const value_string ansi_map_SMS_CauseCode_vals[] = {
2333 { 0, "Address vacant"},
2334 { 1, "Address translation failure"},
2335 { 2, "Network resource shortage"},
2336 { 3, "Network failure"},
2337 { 4, "Invalid Teleservice ID"},
2338 { 5, "Other network problem"},
2339 { 6, "Unsupported network interface"},
2340 { 8, "CDMA handset-based position determination failure"},
2341 { 9, "CDMA handset-based position determination resources released - voice service request"},
2342 { 10, "CDMA handset-based position determination resources released - voice service request - message acknowledged"},
2343 { 11, "Reserved"},
2344 { 12, "Reserved"},
2345 { 13, "Reserved"},
2346 { 14, "Emergency Services Call Precedence"},
2347 { 32, "No page response"},
2348 { 33, "Destination busy"},
2349 { 34, "No acknowledgment"},
2350 { 35, "Destination resource shortage"},
2351 { 36, "SMS delivery postponed"},
2352 { 37, "Destination out of service"},
2353 { 38, "Destination no longer at this address"},
2354 { 39, "Other terminal problem"},
2355 { 64, "Radio interface resource shortage"},
2356 { 65, "Radio interface incompatibility"},
2357 { 66, "Other radio interface problem"},
2358 { 67, "Unsupported Base Station Capability"},
2359 { 96, "Encoding problem"},
2360 { 97, "Service origination denied"},
2361 { 98, "Service termination denied"},
2362 { 99, "Supplementary service not supported"},
2363 { 100, "Service not supported"},
2364 { 101, "Reserved"},
2365 { 102, "Missing expected parameter"},
2366 { 103, "Missing mandatory parameter"},
2367 { 104, "Unrecognized parameter value"},
2368 { 105, "Unexpected parameter value"},
2369 { 106, "User Data size error"},
2370 { 107, "Other general problems"},
2371 { 108, "Session not active"},
2372 { 109, "Reserved"},
2373 { 110, "MS Disconnect"},
2374 { 0, NULL }
2376 static value_string_ext ansi_map_SMS_CauseCode_vals_ext = VALUE_STRING_EXT_INIT(ansi_map_SMS_CauseCode_vals);
2378 /* 6.5.2.126 SMS_ChargeIndicator */
2379 /* SMS Charge Indicator (octet 1) */
2380 static const value_string ansi_map_SMS_ChargeIndicator_vals[] = {
2381 { 0, "Not used"},
2382 { 1, "No charge"},
2383 { 2, "Charge original originator"},
2384 { 3, "Charge original destination"},
2385 { 0, NULL }
2387 /* 4 through 63 Reserved. Treat the same as value 1, No charge.
2388 64 through 127 Reserved. Treat the same as value 2, Charge original originator.
2389 128 through 223 Reserved. Treat the same as value 3, Charge original destination.
2390 224 through 255 Reserved for TIA/EIA-41 protocol extension. If unknown, treat the same as value 2, Charge
2391 original originator.
2394 /* 6.5.2.130 SMS_NotificationIndicator N.S0005-0 v 1.0*/
2395 static const value_string ansi_map_SMS_NotificationIndicator_vals[] = {
2396 { 0, "Not used"},
2397 { 1, "Notify when available"},
2398 { 2, "Do not notify when available"},
2399 { 0, NULL }
2402 /* 6.5.2.136 SMS_OriginationRestrictions */
2403 /* DEFAULT (octet 1, bits A and B) */
2405 static const value_string ansi_map_SMS_OriginationRestrictions_default_vals[] = {
2406 { 0, "Block all"},
2407 { 1, "Reserved"},
2408 { 2, "Allow specific"},
2409 { 3, "Allow all"},
2410 { 0, NULL }
2412 /* DIRECT (octet 1, bit C) */
2413 static const true_false_string ansi_map_SMS_OriginationRestrictions_direct_bool_val = {
2414 "Allow Direct",
2415 "Block Direct"
2418 /* Force Message Center (FMC) (octet 1, bit D) */
2419 static const true_false_string ansi_map_SMS_OriginationRestrictions_fmc_bool_val = {
2420 "Force Indirect",
2421 "No effect"
2424 static void
2425 dissect_ansi_map_sms_originationrestrictions(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2427 int offset = 0;
2428 proto_tree *subtree;
2431 subtree = proto_item_add_subtree(actx->created_item, ett_sms_originationrestrictions);
2432 proto_tree_add_item(subtree, hf_ansi_map_reservedBitHGFE, tvb, offset, 1, ENC_BIG_ENDIAN);
2433 proto_tree_add_item(subtree, hf_ansi_map_sms_originationrestrictions_fmc, tvb, offset, 1, ENC_BIG_ENDIAN);
2434 proto_tree_add_item(subtree, hf_ansi_map_sms_originationrestrictions_direct, tvb, offset, 1, ENC_BIG_ENDIAN);
2435 proto_tree_add_item(subtree, hf_ansi_map_sms_originationrestrictions_default, tvb, offset, 1, ENC_BIG_ENDIAN);
2439 /* 6.5.2.137 SMS_TeleserviceIdentifier */
2440 /* Updated with N.S0011-0 v 1.0 */
2442 #if 0
2443 /* SMS Teleservice Identifier (octets 1 and 2) */
2444 static const value_string ansi_map_SMS_TeleserviceIdentifier_vals[] = {
2445 { 0, "Not used"},
2446 { 1, "Reserved for maintenance"},
2447 { 2, "SSD Update no response"},
2448 { 3, "SSD Update successful"},
2449 { 4, "SSD Update failed"},
2450 { 4096, "AMPS Extended Protocol Enhanced Services" },
2451 { 4097, "CDMA Cellular Paging Teleservice" },
2452 { 4098, "CDMA Cellular Messaging Teleservice" },
2453 { 4099, "CDMA Voice Mail Notification" },
2454 { 32513, "TDMA Cellular Messaging Teleservice" },
2455 { 32520, "TDMA System Assisted Mobile Positioning through Satellite (SAMPS)" },
2456 { 32584, "TDMA Segmented System Assisted Mobile Positioning Service" },
2457 { 0, NULL }
2459 #endif
2460 /* 6.5.2.140 SPINITriggers */
2461 /* All Origination (All) (octet 1, bit A) */
2463 /* 6.5.2.142 SSDUpdateReport */
2464 static const value_string ansi_map_SSDUpdateReport_vals[] = {
2465 { 0, "Not used"},
2466 { 4096, "AMPS Extended Protocol Enhanced Services"},
2467 { 4097, "CDMA Cellular Paging Teleservice"},
2468 { 4098, "CDMA Cellular Messaging Teleservice"},
2469 { 32513, "TDMA Cellular Messaging Teleservice"},
2470 { 32514, "TDMA Cellular Paging Teleservice (CPT-136)"},
2471 { 32515, "TDMA Over-the-Air Activation Teleservice (OATS)"},
2472 { 32516, "TDMA Over-the-Air Programming Teleservice (OPTS)"},
2473 { 32517, "TDMA General UDP Transport Service (GUTS)"},
2474 { 32576, "Reserved"},
2475 { 32577, "TDMA Segmented Cellular MessagingTeleservice"},
2476 { 32578, "TDMA Segmented Cellular Paging Teleservice"},
2477 { 32579, "TDMA Segmented Over-the-Air Activation Teleservice (OATS)"},
2478 { 32580, "TDMA Segmented Over-the-Air Programming Teleservice (OPTS)."},
2479 { 32581, "TDMA Segmented General UDP Transport Service (GUTS)"},
2480 { 32576, "Reserved"},
2481 { 0, NULL }
2484 /* 6.5.2.143 StationClassMark */
2486 /* 6.5.2.144 SystemAccessData */
2488 /* 6.5.2.146 SystemCapabilities */
2489 /* Updated in N.S0008-0 v 1.0 */
2490 static const true_false_string ansi_map_systemcapabilities_auth_bool_val = {
2491 "Authentication parameters were requested on this system access (AUTH=1 in the OMT)",
2492 "Authentication parameters were not requested on this system access (AUTH=0 in the OMT)."
2495 static const true_false_string ansi_map_systemcapabilities_se_bool_val = {
2496 "Signaling Message Encryption supported by the system",
2497 "Signaling Message Encryption not supported by the system"
2500 static const true_false_string ansi_map_systemcapabilities_vp_bool_val = {
2501 "Voice Privacy supported by the system",
2502 "Voice Privacy not supported by the system"
2505 static const true_false_string ansi_map_systemcapabilities_cave_bool_val = {
2506 "System can execute the CAVE algorithm and share SSD for the indicated MS",
2507 "System cannot execute the CAVE algorithm and cannot share SSD for the indicated MS"
2510 static const true_false_string ansi_map_systemcapabilities_ssd_bool_val = {
2511 "SSD is shared with the system for the indicated MS",
2512 "SSD is not shared with the system for the indicated MS"
2515 static const true_false_string ansi_map_systemcapabilities_dp_bool_val = {
2516 "DP is supported by the system",
2517 "DP is not supported by the system"
2520 static void
2521 dissect_ansi_map_systemcapabilities(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2523 int offset = 0;
2524 proto_tree *subtree;
2527 subtree = proto_item_add_subtree(actx->created_item, ett_systemcapabilities);
2528 proto_tree_add_item(subtree, hf_ansi_map_reservedBitHG, tvb, offset, 1, ENC_BIG_ENDIAN);
2529 proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_dp, tvb, offset, 1, ENC_BIG_ENDIAN);
2530 proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_ssd, tvb, offset, 1, ENC_BIG_ENDIAN);
2531 proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_cave, tvb, offset, 1, ENC_BIG_ENDIAN);
2532 proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_vp, tvb, offset, 1, ENC_BIG_ENDIAN);
2533 proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_se, tvb, offset, 1, ENC_BIG_ENDIAN);
2534 proto_tree_add_item(subtree, hf_ansi_map_systemcapabilities_auth, tvb, offset, 1, ENC_BIG_ENDIAN);
2537 /* 6.5.2.151 TDMABurstIndicator */
2538 /* 6.5.2.152 TDMACallMode */
2539 /* 6.5.2.153 TDMAChannelData Updated in N.S0007-0 v 1.0*/
2541 /* 6.5.2.155 TerminationAccessType */
2542 /* XXX Fix Me, Fill up the values or do special decoding? */
2543 static const value_string ansi_map_TerminationAccessType_vals[] = {
2544 { 0, "Not used"},
2545 { 1, "Reserved for controlling system assignment (may be a trunk group identifier)."},
2546 /* 1 through 127 */
2547 { 127, "Reserved for controlling system assignment (may be a trunk group identifier)."},
2548 { 128, "Reserved for TIA/EIA-41 protocol extension. If unknown, treat the same as value 253, Land-to-Mobile Directory Number access"},
2549 /* 128 through 160 */
2550 { 160, "Reserved for TIA/EIA-41 protocol extension. If unknown, treat the same as value 253, Land-to-Mobile Directory Number access"},
2551 { 161, "Reserved for this Standard"},
2552 /* 161 through 251 */
2553 { 151, "Reserved for this Standard"},
2554 { 252, "Mobile-to-Mobile Directory Number access"},
2555 { 253, "Land-to-Mobile Directory Number access"},
2556 { 254, "Remote Feature Control port access"},
2557 { 255, "Roamer port access"},
2558 { 0, NULL }
2561 /* 6.5.2.158 TerminationTreatment */
2562 static const value_string ansi_map_TerminationTreatment_vals[] = {
2563 { 0, "Not used"},
2564 { 1, "MS Termination"},
2565 { 2, "Voice Mail Storage"},
2566 { 3, "Voice Mail Retrieval"},
2567 { 4, "Dialogue Termination"},
2568 { 0, NULL }
2571 /* 6.5.2.159 TerminationTriggers */
2572 /* Busy (octet 1, bits A and B) */
2573 static const value_string ansi_map_terminationtriggers_busy_vals[] = {
2574 { 0, "Busy Call"},
2575 { 1, "Busy Trigger"},
2576 { 2, "Busy Leg"},
2577 { 3, "Reserved. Treat as an unrecognized parameter value"},
2578 { 0, NULL }
2580 /* Routing Failure (RF) (octet 1, bits C and D) */
2581 static const value_string ansi_map_terminationtriggers_rf_vals[] = {
2582 { 0, "Failed Call"},
2583 { 1, "Routing Failure Trigger"},
2584 { 2, "Failed Leg"},
2585 { 3, "Reserved. Treat as an unrecognized parameter value"},
2586 { 0, NULL }
2588 /* No Page Response (NPR) (octet 1, bits E and F) */
2589 static const value_string ansi_map_terminationtriggers_npr_vals[] = {
2590 { 0, "No Page Response Call"},
2591 { 1, "No Page Response Trigger"},
2592 { 2, "No Page Response Leg"},
2593 { 3, "Reserved. Treat as an unrecognized parameter value"},
2594 { 0, NULL }
2596 /* No Answer (NA) (octet 1, bits G and H) */
2597 static const value_string ansi_map_terminationtriggers_na_vals[] = {
2598 { 0, "No Answer Call"},
2599 { 1, "No Answer Trigger"},
2600 { 2, "No Answer Leg"},
2601 { 3, "Reserved"},
2602 { 0, NULL }
2604 /* None Reachable (NR) (octet 2, bit A) */
2605 static const value_string ansi_map_terminationtriggers_nr_vals[] = {
2606 { 0, "Member Not Reachable"},
2607 { 1, "Group Not Reachable"},
2608 { 0, NULL }
2611 /* 6.5.2.159 TerminationTriggers N.S0005-0 v 1.0*/
2612 static void
2613 dissect_ansi_map_terminationtriggers(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2615 int offset = 0;
2616 proto_tree *subtree;
2619 subtree = proto_item_add_subtree(actx->created_item, ett_transactioncapability);
2621 proto_tree_add_item(subtree, hf_ansi_map_reservedBitH, tvb, offset, 1, ENC_BIG_ENDIAN);
2622 /* No Page Response (NPR) (octet 1, bits E and F) */
2623 proto_tree_add_item(subtree, hf_ansi_map_terminationtriggers_npr, tvb, offset, 1, ENC_BIG_ENDIAN);
2624 /* No Answer (NA) (octet 1, bits G and H) */
2625 proto_tree_add_item(subtree, hf_ansi_map_terminationtriggers_na, tvb, offset, 1, ENC_BIG_ENDIAN);
2626 /* Routing Failure (RF) (octet 1, bits C and D) */
2627 proto_tree_add_item(subtree, hf_ansi_map_terminationtriggers_rf, tvb, offset, 1, ENC_BIG_ENDIAN);
2628 /* Busy (octet 1, bits A and B) */
2629 proto_tree_add_item(subtree, hf_ansi_map_terminationtriggers_busy, tvb, offset, 1, ENC_BIG_ENDIAN);
2630 offset++;
2632 /* None Reachable (NR) (octet 2, bit A) */
2633 proto_tree_add_item(subtree, hf_ansi_map_terminationtriggers_nr, tvb, offset, 1, ENC_BIG_ENDIAN);
2636 /* 6.5.2.160 TransactionCapability (TIA/EIA-41.5-D, page 5-315) */
2637 /* Updated with N.S0010-0 v 1.0, N.S0012-0 v 1.0 N.S0013-0 v 1.0 */
2638 static const true_false_string ansi_map_trans_cap_prof_bool_val = {
2639 "The system is capable of supporting the IS-41-C profile parameters",
2640 "The system is not capable of supporting the IS-41-C profile parameters"
2643 static const true_false_string ansi_map_trans_cap_busy_bool_val = {
2644 "The system is capable of detecting a busy condition at the current time",
2645 "The system is not capable of detecting a busy condition at the current time"
2648 static const true_false_string ansi_map_trans_cap_ann_bool_val = {
2649 "The system is capable of honoring the AnnouncementList parameter at the current time",
2650 "The system is not capable of honoring the AnnouncementList parameter at the current time"
2653 static const true_false_string ansi_map_trans_cap_rui_bool_val = {
2654 "The system is capable of interacting with the user",
2655 "The system is not capable of interacting with the user"
2658 static const true_false_string ansi_map_trans_cap_spini_bool_val = {
2659 "The system is capable of supporting local SPINI operation",
2660 "The system is not capable of supporting local SPINI operation at the current time"
2663 static const true_false_string ansi_map_trans_cap_uzci_bool_val = {
2664 "The system is User Zone capable at the current time",
2665 "The system is not User Zone capable at the current time"
2667 static const true_false_string ansi_map_trans_cap_ndss_bool_val = {
2668 "Serving system is NDSS capable",
2669 "Serving system is not NDSS capable"
2671 static const true_false_string ansi_map_trans_cap_nami_bool_val = {
2672 "The system is CNAP/CNAR capable",
2673 "The system is not CNAP/CNAR capable"
2676 static const value_string ansi_map_trans_cap_multerm_vals[] = {
2677 { 0, "The system cannot accept a termination at this time (i.e., cannot accept routing information)"},
2678 { 1, "The system supports the number of call legs indicated"},
2679 { 2, "The system supports the number of call legs indicated"},
2680 { 3, "The system supports the number of call legs indicated"},
2681 { 4, "The system supports the number of call legs indicated"},
2682 { 5, "The system supports the number of call legs indicated"},
2683 { 6, "The system supports the number of call legs indicated"},
2684 { 7, "The system supports the number of call legs indicated"},
2685 { 8, "The system supports the number of call legs indicated"},
2686 { 9, "The system supports the number of call legs indicated"},
2687 { 10, "The system supports the number of call legs indicated"},
2688 { 11, "The system supports the number of call legs indicated"},
2689 { 12, "The system supports the number of call legs indicated"},
2690 { 13, "The system supports the number of call legs indicated"},
2691 { 14, "The system supports the number of call legs indicated"},
2692 { 15, "The system supports the number of call legs indicated"},
2693 { 0, NULL }
2696 static const true_false_string ansi_map_trans_cap_tl_bool_val = {
2697 "The system is capable of supporting the TerminationList parameter at the current time",
2698 "The system is not capable of supporting the TerminationList parameter at the current time"
2701 static const true_false_string ansi_map_trans_cap_waddr_bool_val = {
2702 "The system is capable of supporting the TriggerAddressList parameter",
2703 "The system is not capable of supporting the TriggerAddressList parameter"
2707 static void
2708 dissect_ansi_map_transactioncapability(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2710 int offset = 0;
2711 proto_tree *subtree;
2714 subtree = proto_item_add_subtree(actx->created_item, ett_transactioncapability);
2716 /*NAME Capability Indicator (NAMI) (octet 1, bit H) */
2717 proto_tree_add_item(subtree, hf_ansi_map_trans_cap_nami, tvb, offset, 1, ENC_BIG_ENDIAN);
2718 /* NDSS Capability (NDSS) (octet 1, bit G) */
2719 proto_tree_add_item(subtree, hf_ansi_map_trans_cap_ndss, tvb, offset, 1, ENC_BIG_ENDIAN);
2720 /* UZ Capability Indicator (UZCI) (octet 1, bit F) */
2721 proto_tree_add_item(subtree, hf_ansi_map_trans_cap_uzci, tvb, offset, 1, ENC_BIG_ENDIAN);
2722 /* Subscriber PIN Intercept (SPINI) (octet 1, bit E) */
2723 proto_tree_add_item(subtree, hf_ansi_map_trans_cap_spini, tvb, offset, 1, ENC_BIG_ENDIAN);
2724 /* Remote User Interaction (RUI) (octet 1, bit D) */
2725 proto_tree_add_item(subtree, hf_ansi_map_trans_cap_rui, tvb, offset, 1, ENC_BIG_ENDIAN);
2726 /* Announcements (ANN) (octet 1, bit C) */
2727 proto_tree_add_item(subtree, hf_ansi_map_trans_cap_ann, tvb, offset, 1, ENC_BIG_ENDIAN);
2728 /* Busy Detection (BUSY) (octet 1, bit B) */
2729 proto_tree_add_item(subtree, hf_ansi_map_trans_cap_busy, tvb, offset, 1, ENC_BIG_ENDIAN);
2730 /* Profile (PROF) (octet 1, bit A) */
2731 proto_tree_add_item(subtree, hf_ansi_map_trans_cap_prof, tvb, offset, 1, ENC_BIG_ENDIAN);
2732 offset++;
2734 /* WIN Addressing (WADDR) (octet 2, bit F) */
2735 proto_tree_add_item(subtree, hf_ansi_trans_cap_waddr, tvb, offset, 1, ENC_BIG_ENDIAN);
2736 /* TerminationList (TL) (octet 2, bit E) */
2737 proto_tree_add_item(subtree, hf_ansi_trans_cap_tl, tvb, offset, 1, ENC_BIG_ENDIAN);
2738 /* Multiple Terminations (octet 2, bits A-D) */
2739 proto_tree_add_item(subtree, hf_ansi_trans_cap_multerm, tvb, offset, 1, ENC_BIG_ENDIAN);
2742 /* 6.5.2.162 UniqueChallengeReport */
2743 /* Unique Challenge Report (octet 1) */
2744 static const value_string ansi_map_UniqueChallengeReport_vals[] = {
2745 { 0, "Not used"},
2746 { 1, "Unique Challenge not attempted"},
2747 { 2, "Unique Challenge no response"},
2748 { 3, "Unique Challenge successful"},
2749 { 4, "Unique Challenge failed"},
2750 { 0, NULL }
2753 /* 6.5.2.166 VoicePrivacyMask */
2756 /* 6.5.2.e (TSB76) CDMAServiceConfigurationRecord N.S0008-0 v 1.0 */
2757 /* a. This field carries the CDMA Service Configuration Record. The bit-layout is the
2758 same as that of Service Configuration Record in TSB74, and J-STD-008.
2761 /* 6.5.2.f CDMAServiceOption N.S0010-0 v 1.0 */
2763 /* values copied from old ANSI map dissector */
2764 static const range_string cdmaserviceoption_vals[] = {
2765 { 1, 1, "Basic Variable Rate Voice Service (8 kbps)" },
2766 { 2, 2, "Mobile Station Loopback (8 kbps)" },
2767 { 3, 3, "Enhanced Variable Rate Voice Service (8 kbps)" },
2768 { 4, 4, "Asynchronous Data Service (9.6 kbps)" },
2769 { 5, 5, "Group 3 Facsimile (9.6 kbps)" },
2770 { 6, 6, "Short Message Services (Rate Set 1)" },
2771 { 7, 7, "Packet Data Service: Internet or ISO Protocol Stack (9.6 kbps)" },
2772 { 8, 8, "Packet Data Service: CDPD Protocol Stack (9.6 kbps)" },
2773 { 9, 9, "Mobile Station Loopback (13 kbps)" },
2774 { 10, 10, "STU-III Transparent Service" },
2775 { 11, 11, "STU-III Non-Transparent Service" },
2776 { 12, 12, "Asynchronous Data Service (14.4 or 9.6 kbps)" },
2777 { 13, 13, "Group 3 Facsimile (14.4 or 9.6 kbps)" },
2778 { 14, 14, "Short Message Services (Rate Set 2)" },
2779 { 15, 15, "Packet Data Service: Internet or ISO Protocol Stack (14.4 kbps)" },
2780 { 16, 16, "Packet Data Service: CDPD Protocol Stack (14.4 kbps)" },
2781 { 17, 17, "High Rate Voice Service (13 kbps)" },
2782 { 18, 18, "Over-the-Air Parameter Administration (Rate Set 1)" },
2783 { 19, 19, "Over-the-Air Parameter Administration (Rate Set 2)" },
2784 { 20, 20, "Group 3 Analog Facsimile (Rate Set 1)" },
2785 { 21, 21, "Group 3 Analog Facsimile (Rate Set 2)" },
2786 { 22, 22, "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS1 forward, RS1 reverse)" },
2787 { 23, 23, "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS1 forward, RS2 reverse)" },
2788 { 24, 24, "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS2 forward, RS1 reverse)" },
2789 { 25, 25, "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS2 forward, RS2 reverse)" },
2790 { 26, 26, "High Speed Packet Data Service: CDPD Protocol Stack (RS1 forward, RS1 reverse)" },
2791 { 27, 27, "High Speed Packet Data Service: CDPD Protocol Stack (RS1 forward, RS2 reverse)" },
2792 { 28, 28, "High Speed Packet Data Service: CDPD Protocol Stack (RS2 forward, RS1 reverse)" },
2793 { 29, 29, "High Speed Packet Data Service: CDPD Protocol Stack (RS2 forward, RS2 reverse)" },
2794 { 30, 30, "Supplemental Channel Loopback Test for Rate Set 1" },
2795 { 31, 31, "Supplemental Channel Loopback Test for Rate Set 2" },
2796 { 32, 32, "Test Data Service Option (TDSO)" },
2797 { 33, 33, "cdma2000 High Speed Packet Data Service, Internet or ISO Protocol Stack" },
2798 { 34, 34, "cdma2000 High Speed Packet Data Service, CDPD Protocol Stack" },
2799 { 35, 35, "Location Services, Rate Set 1 (9.6 kbps)" },
2800 { 36, 36, "Location Services, Rate Set 2 (14.4 kbps)" },
2801 { 37, 37, "ISDN Interworking Service (64 kbps)" },
2802 { 38, 38, "GSM Voice" },
2803 { 39, 39, "GSM Circuit Data" },
2804 { 40, 40, "GSM Packet Data" },
2805 { 41, 41, "GSM Short Message Service" },
2806 { 42, 42, "None Reserved for MC-MAP standard service options" },
2807 { 54, 54, "Markov Service Option (MSO)" },
2808 { 55, 55, "Loopback Service Option (LSO)" },
2809 { 56, 56, "Selectable Mode Vocoder" },
2810 { 57, 57, "32 kbps Circuit Video Conferencing" },
2811 { 58, 58, "64 kbps Circuit Video Conferencing" },
2812 { 59, 59, "HRPD Accounting Records Identifier" },
2813 { 60, 60, "Link Layer Assisted Robust Header Compression (LLA ROHC) - Header Removal" },
2814 { 61, 61, "Link Layer Assisted Robust Header Compression (LLA ROHC) - Header Compression" },
2815 { 62, 62, "Source-Controlled Variable-Rate Multimode Wideband Speech Codec (VMR-WB) Rate Set 2" },
2816 { 63, 63, "Source-Controlled Variable-Rate Multimode Wideband Speech Codec (VMR-WB) Rate Set 1" },
2817 { 64, 64, "HRPD auxiliary Packet Data Service instance" },
2818 { 65, 65, "cdma2000/GPRS Inter-working" },
2819 { 66, 66, "cdma2000 High Speed Packet Data Service, Internet or ISO Protocol Stack" },
2820 { 67, 67, "HRPD Packet Data IP Service where Higher Layer Protocol is IP or ROHC" },
2821 { 68, 68, "Enhanced Variable Rate Voice Service (EVRC-B)" },
2822 { 69, 69, "HRPD Packet Data Service, which when used in paging over the 1x air interface, a page response is required" },
2823 { 70, 70, "Enhanced Variable Rate Voice Service (EVRC-WB)" },
2824 { 71, 4099, "None Reserved for standard service options" },
2825 { 4100, 4100, "Asynchronous Data Service, Revision 1 (9.6 or 14.4 kbps)" },
2826 { 4101, 4101, "Group 3 Facsimile, Revision 1 (9.6 or 14.4 kbps)" },
2827 { 4102, 4102, "Reserved for standard service option" },
2828 { 4103, 4103, "Packet Data Service: Internet or ISO Protocol Stack, Revision 1 (9.6 or 14.4 kbps)" },
2829 { 4104, 4104, "Packet Data Service: CDPD Protocol Stack, Revision 1 (9.6 or 14.4 kbps)" },
2830 { 4105, 32767, "Reserved for standard service options" },
2831 { 32768, 32768, "QCELP (13 kbps)" },
2832 { 32769, 32771, "Proprietary QUALCOMM Incorporated" },
2833 { 32772, 32775, "Proprietary OKI Telecom" },
2834 { 32776, 32779, "Proprietary Lucent Technologies" },
2835 { 32780, 32783, "Nokia" },
2836 { 32784, 32787, "NORTEL NETWORKS" },
2837 { 32788, 32791, "Sony Electronics Inc" },
2838 { 32792, 32795, "Motorola" },
2839 { 32796, 32799, "QUALCOMM Incorporated" },
2840 { 32800, 32803, "QUALCOMM Incorporated" },
2841 { 32804, 32807, "QUALCOMM Incorporated" },
2842 { 32808, 32811, "QUALCOMM Incorporated" },
2843 { 32812, 32815, "Lucent Technologies" },
2844 { 32816, 32819, "Denso International" },
2845 { 32820, 32823, "Motorola" },
2846 { 32824, 32827, "Denso International" },
2847 { 32828, 32831, "Denso International" },
2848 { 32832, 32835, "Denso International" },
2849 { 32836, 32839, "NEC America" },
2850 { 32840, 32843, "Samsung Electronics" },
2851 { 32844, 32847, "Texas Instruments Incorporated" },
2852 { 32848, 32851, "Toshiba Corporation" },
2853 { 32852, 32855, "LG Electronics Inc." },
2854 { 32856, 32859, "VIA Telecom Inc." },
2855 { 0, 0, NULL }
2858 static void
2859 dissect_ansi_map_cdmaserviceoption(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
2860 int offset = 0;
2861 proto_tree *subtree;
2864 subtree = proto_item_add_subtree(actx->created_item, ett_cdmaserviceoption);
2866 proto_tree_add_item(subtree, hf_ansi_map_cdmaserviceoption, tvb, offset, 2, ENC_BIG_ENDIAN);
2870 /* 6.5.2.f (TSB76) CDMAServiceOption N.S0008-0 v 1.0*/
2871 /* This field carries the CDMA Service Option. The bit-layout is the same as that of
2872 Service Option in TSB74 and J-STD-008.*/
2874 /* 6.5.2.i (IS-730) TDMAServiceCode N.S0008-0 v 1.0 */
2875 static const value_string ansi_map_TDMAServiceCode_vals[] = {
2876 { 0, "Analog Speech Only"},
2877 { 1, "Digital Speech Only"},
2878 { 2, "Analog or Digital Speech, Analog Preferred"},
2879 { 3, "Analog or Digital Speech, Digital Preferred"},
2880 { 4, "Asynchronous Data"},
2881 { 5, "G3 Fax"},
2882 { 6, "Not Used (Service Rejected)"},
2883 { 7, "STU-III"},
2884 { 0, NULL }
2886 #if 0
2887 /* 6.5.2.j (IS-730) TDMATerminalCapability N.S0008-0 v 1.0 Updted with N.S0015-0 */
2888 /* Supported Frequency Band (octet 1) */
2889 /* Voice Coder (octet 2) */
2890 /* Protocol Version (octet 3) N.S0015-0 */
2891 static const value_string ansi_map_TDMATerminalCapability_prot_ver_vals[] = {
2892 { 0, "EIA-553 or IS-54-A"},
2893 { 1, "TIA/EIA-627.(IS-54-B)"},
2894 { 2, "IS-136"},
2895 { 3, "Permanently Reserved (ANSI J-STD-011).Treat the same as value 4, IS-136-A."},
2896 { 4, "PV 0 as published in TIA/EIA-136-0 and IS-136-A."},
2897 { 5, "PV 1 as published in TIA/EIA-136-A."},
2898 { 6, "PV 2 as published in TIA/EIA-136-A."},
2899 { 7, "PV 3 as published in TIA/EIA-136-A."},
2900 { 0, NULL }
2902 #endif
2903 /* Asynchronous Data (ADS) (octet 4, bit A) N.S0007-0*/
2904 /* Group 3 Fax (G3FAX) (octet 4, bit B) */
2905 /* Secure Telephone Unit III (STU3) (octet 4, bit C) */
2906 /* Analog Voice (AVOX) (octet 4, bit D) */
2907 /* Half Rate (HRATE) (octet 4, bit E) */
2908 /* Full Rate (FRATE) (octet 4, bit F) */
2909 /* Double Rate (2RATE) (octet 4, bit G) */
2910 /* Triple Rate (3RATE) (octet 4, bit H) */
2913 /* 6.5.2.k (IS-730)) TDMAVoiceCoder N.S0008-0 v 1.0, N.S0007-0 */
2914 /* VoiceCoder (octet 1) */
2916 /* 6.5.2.p UserZoneData N.S0015-0 */
2918 /* 6.5.2.aa BaseStationManufacturerCode N.S0007-0 v 1.0 */
2919 /* The BaseStationManufacturerCode (BSMC) parameter specifies the manufacturer of the
2920 base station that is currently serving the MS (see IS-136 for enumeration of values).*/
2922 /* 6.5.2.ab BSMCStatus */
2924 /* BSMC Status (octet 1) */
2925 static const value_string ansi_map_BSMCStatus_vals[] = {
2926 { 0, "Same BSMC Value shall not be supported"},
2927 { 1, "Same BSMC Value shall be supported"},
2928 { 0, NULL }
2931 /*- 6.5.2.ac ControlChannelMode (N.S0007-0 v 1.0)*/
2932 static const value_string ansi_map_ControlChannelMode_vals[] = {
2933 { 0, "Unknown"},
2934 { 1, "MS is in Analog CC Mode"},
2935 { 2, "MS is in Digital CC Mode"},
2936 { 3, "MS is in NAMPS CC Mode"},
2937 { 0, NULL }
2940 /* 6.5.2.ad NonPublicData N.S0007-0 v 1.0*/
2941 /* NP Only Service (NPOS) (octet 1, bits A and B) */
2942 /* Charging Area Tone Service (CATS) (octet 1, bits C - F) */
2943 /* PSID/RSID Download Order (PRDO) (octet 1, bits G and H) */
2945 /* 6.5.2.ae PagingFrameClass N.S0007-0 v 1.0*/
2946 /* Paging Frame Class (octet 1) */
2948 static const value_string ansi_map_PagingFrameClass_vals[] = {
2949 { 0, "PagingFrameClass 1 (1.28 seconds)"},
2950 { 1, "PagingFrameClass 2 (2.56 seconds)"},
2951 { 2, "PagingFrameClass 3 (3.84 seconds)"},
2952 { 3, "PagingFrameClass 4 (7.68 seconds)"},
2953 { 4, "PagingFrameClass 5 (15.36 seconds)"},
2954 { 5, "PagingFrameClass 6 (30.72 seconds)"},
2955 { 6, "PagingFrameClass 7 (61.44 seconds)"},
2956 { 7, "PagingFrameClass 8 (122.88 seconds)"},
2957 { 8, "Reserved. Treat the same as value 0, PagingFrameClass 1"},
2958 { 0, NULL }
2961 /* 6.5.2.af PSID_RSIDInformation N.S0007-0 v 1.0*/
2962 /* PSID/RSID Indicator (octet 1, bit A) */
2963 /* PSID/RSID Type (octet 1, bits B-D) */
2965 /* 6.5.2.ah ServicesResult N.S0007-0 v 1.0*/
2966 /* PSID/RSID Download Result (PRDR) (octet 1, bits A and B) */
2967 static const value_string ansi_map_ServicesResult_ppr_vals[] = {
2968 { 0, "No Indication"},
2969 { 1, "Unsuccessful PSID/RSID download"},
2970 { 2, "Successful PSID/RSID download"},
2971 { 3, "Reserved. Treat the same as value 0, No Indication"},
2972 { 0, NULL }
2975 /* 6.5.2.ai SOCStatus N.S0007-0 v 1.0*/
2977 /* SOC Status (octet 1) */
2978 static const value_string ansi_map_SOCStatus_vals[] = {
2979 { 0, "Same SOC Value shall not be supported"},
2980 { 1, "Same SOC Value shall be supported"},
2981 { 0, NULL }
2984 /* 6.5.2.aj SystemOperatorCode N.S0007-0 v 1.0*/
2985 /* The SystemOperatorCode (SOC) parameter specifies the system operator that is currently
2986 providing service to a MS (see IS-136 for enumeration of values) */
2988 /* 6.5.2.al UserGroup N.S0007-0 v 1.0*/
2990 /* 6.5.2.am UserZoneData N.S0007-0 v 1.0*/
2993 /*Table 6.5.2.ay TDMABandwidth value N.S0008-0 v 1.0 */
2994 static const value_string ansi_map_TDMABandwidth_vals[] = {
2995 { 0, "Half-Rate Digital Traffic Channel Only"},
2996 { 1, "Full-Rate Digital Traffic Channel Only"},
2997 { 2, "Half-Rate or Full-rate Digital Traffic Channel - Full-Rate Preferred"},
2998 { 3, "Half-rate or Full-rate Digital Traffic Channel - Half-rate Preferred"},
2999 { 4, "Double Full-Rate Digital Traffic Channel Only"},
3000 { 5, "Triple Full-Rate Digital Traffic Channel Only"},
3001 { 6, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3002 { 7, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3003 { 8, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3004 { 9, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3005 { 10, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3006 { 11, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3007 { 12, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3008 { 13, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3009 { 14, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3010 { 15, "Reserved. Treat reserved values the same as value 1 - Full-Rate Digital Traffic Channel Only"},
3011 { 0, NULL }
3015 /* 6.5.2.az TDMADataFeaturesIndicator N.S0008-0 v 1.0 */
3016 /* TDMADataFeaturesIndicator
3017 ansi_map_FeatureActivity_vals
3019 ADS FeatureActivity ADS-FA ( octet 1 bit A and B )
3020 G3 Fax FeatureActivity G3FAX-FA ( octet 1 bit C and D )
3021 STU-III FeatureActivity STUIII-FA ( octet 1 bit E and F )
3022 Half Rate data FeatureActivity HRATE-FA ( octet 2 bit A and B )
3023 Full Rate data FeatureActivity FRATE-FA ( octet 2 bit C and D )
3024 Double Rate data FeatureActivity 2RATE-FA ( octet 2 bit E and F )
3025 Triple Rate data FeatureActivity 3RATE-FA ( octet g bit G and H )
3027 Table 6.5.2.azt TDMADataFeaturesIndicator value
3028 static const value_string ansi_map_TDMADataFeaturesIndicator_vals[] = {
3029 { 0, "Not Used"},
3030 { 1, "Not Authorized"},
3031 { 2, "Authorized, but de-activated"},
3032 { 3, "Authorized and activated"},
3033 { 0, NULL }
3038 /* 6.5.2.ba TDMADataMode N.S0008-0 v 1.0*/
3040 /* 6.5.2.bb TDMAVoiceMode */
3042 /* 6.5.2.bb CDMAConnectionReference N.S0008-0 v 1.0 */
3043 /* Service Option Connection Reference Octet 1 */
3044 /* a. This field carries the CDMA Service Option Connection Reference. The bitlayout
3045 is the same as that of Service Option Connection Reference in TSB74 and
3046 J-STD-008.
3049 /* 6.5.2.ad CDMAState N.S0008-0 v 1.0 */
3050 /* Service Option State Octet 1 */
3051 /* a. This field carries the CDMA Service Option State information. The CDMA
3052 Service Option State is defined in the current CDMA Service Options standard.
3053 If CDMA Service Option State is not explicitly defined within a section of the
3054 relevant CDMA Service Option standard, the CDMA Service Option State shall
3055 carry the value of the ORD_Q octet of all current Service Option Control Orders
3056 (see IS-95), or the contents of all current CDMA Service Option Control
3057 Messages (see TSB74) type specific field for this connection reference. */
3059 /* 6.5.2.aj SecondInterMSCCircuitID */
3060 /* -- XXX Same code as ISLPinformation???
3061 dissect_ansi_map_secondintermsccircuitid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree){
3063 int offset = 0;
3065 proto_tree *subtree;
3068 subtree = proto_item_add_subtree(actx->created_item, ett_billingid);
3069 / Trunk Group Number (G) Octet 1 /
3070 proto_tree_add_item(subtree, hf_ansi_map_tgn, tvb, offset, 1, ENC_BIG_ENDIAN);
3071 offset++;
3072 / Trunk Member Number (M) Octet2 /
3073 proto_tree_add_item(subtree, hf_ansi_map_tmn, tvb, offset, 1, ENC_BIG_ENDIAN);
3076 #if 0
3077 /* 6.5.2.as ChangeServiceAttributes N.S0008-0 v 1.0 */
3078 /* Change Facilities Flag (CHGFAC)(octet 1, bits A - B) */
3079 static const value_string ansi_map_ChangeServiceAttributes_chgfac_vals[] = {
3080 { 0, "Change Facilities Operation Requested"},
3081 { 1, "Change Facilities Operation Not Requested"},
3082 { 2, "Change Facilities Operation Used"},
3083 { 3, "Change Facilities Operation Not Used"},
3084 { 0, NULL }
3086 #endif
3087 #if 0
3088 /* Service Negotiate Flag (SRVNEG)(octet 1, bits C - D) */
3089 static const value_string ansi_map_ChangeServiceAttributes_srvneg_vals[] = {
3090 { 0, "Service Negotiation Used"},
3091 { 1, "Service Negotiation Not Used"},
3092 { 2, "Service Negotiation Required"},
3093 { 3, "Service Negotiation Not Required"},
3094 { 0, NULL }
3096 #endif
3097 #if 0
3098 /* 6.5.2.au DataPrivacyParameters N.S0008-0 v 1.0*/
3099 /* Privacy Mode (PM) (octet 1, Bits A and B) */
3100 static const value_string ansi_map_DataPrivacyParameters_pm_vals[] = {
3101 { 0, "Privacy inactive or not supported"},
3102 { 1, "Privacy Requested or Acknowledged"},
3103 { 2, "Reserved. Treat reserved values the same as value 0, Privacy inactive or not supported."},
3104 { 3, "Reserved. Treat reserved values the same as value 0, Privacy inactive or not supported."},
3105 { 0, NULL }
3107 #endif
3108 #if 0
3109 /* Data Privacy Version (PM) (octet 2) */
3110 static const value_string ansi_map_DataPrivacyParameters_data_priv_ver_vals[] = {
3111 { 0, "Not used"},
3112 { 1, "Data Privacy Version 1"},
3113 { 0, NULL }
3115 #endif
3117 /* 6.5.2.av ISLPInformation N.S0008-0 v 1.0*/
3118 /* ISLP Type (octet 1) */
3119 static const value_string ansi_map_islp_type_vals[] = {
3120 { 0, "No ISLP supported"},
3121 { 1, "ISLP supported"},
3122 { 0, NULL }
3124 /* 6.5.2.bc AnalogRedirectInfo */
3125 /* Sys Ordering (octet 1, bits A-E) */
3126 /* Ignore CDMA (IC) (octet 1, bit F) */
3128 /* 6.5.2.be CDMAChannelNumber N.S0010-0 v 1.0*/
3130 /* 6.5.2.bg CDMAPowerCombinedIndicator N.S0010-0 v 1.0*/
3132 /* 6.5.2.bi CDMASearchParameters N.S0010-0 v 1.0*/
3134 /* 6.5.2.bk CDMANetworkIdentification N.S0010-0 v 1.0*/
3135 /* See CDMA [J-STD-008] for encoding of this field. */
3137 /* 6.5.2.bo RequiredParametersMask N.S0010-0 v 1.0 */
3139 /* 6.5.2.bp ServiceRedirectionCause */
3140 static const value_string ansi_map_ServiceRedirectionCause_type_vals[] = {
3141 { 0, "Not used"},
3142 { 1, "NormalRegistration"},
3143 { 2, "SystemNotFound."},
3144 { 3, "ProtocolMismatch."},
3145 { 4, "RegistrationRejection."},
3146 { 5, "WrongSID."},
3147 { 6, "WrongNID.."},
3148 { 0, NULL }
3151 /* 6.5.2.bq ServiceRedirectionInfo N.S0010-0 v 1.0 */
3153 /* 6.5.2.br RoamingIndication N.S0010-0 v 1.0*/
3154 /* See CDMA [TSB58] for the definition of this field. */
3156 /* 6.5.2.bw CallingPartyName N.S0012-0 v 1.0*/
3158 #if 0
3159 /* Presentation Status (octet 1, bits A and B) */
3160 static const value_string ansi_map_Presentation_Status_vals[] = {
3161 { 0, "Presentation allowed"},
3162 { 1, "Presentation restricted"},
3163 { 2, "Blocking toggle"},
3164 { 3, "No indication"},
3165 { 0, NULL }
3167 #endif
3168 #if 0
3169 /* Availability (octet 1, bit E) N.S0012-0 v 1.0*/
3170 static const true_false_string ansi_map_Availability_bool_val = {
3171 "Name not available",
3172 "Name available/unknown"
3174 #endif
3175 static void
3176 dissect_ansi_map_callingpartyname(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
3178 /* Availability (octet 1, bit E) N.S0012-0 v 1.0*/
3180 /* Presentation Status (octet 1, bits A and B) */
3187 /* 6.5.2.bx DisplayText N.S0012-0 v 1.0*/
3188 /* a. Refer to ANSI T1.610 for field encoding. */
3190 /* 6.5.2.bz ServiceID
3191 Service Identifier (octets 1 to n)
3192 0 Not used.
3193 1 Calling Name Presentation - No RND.
3194 2 Calling Name Presentation with RND.
3197 /* 6.5.2.co GlobalTitle N.S0013-0 v 1.0
3198 * Refer to Section 3 of ANSI T1.112 for the encoding of this field.
3200 /* Address Indicator octet 1 */
3201 /* Global Title Octet 2 - n */
3204 #if 0
3205 /* 6.5.2.dc SpecializedResource N.S0013-0 v 1.0*/
3206 /* Resource Type (octet 1) */
3207 static const value_string ansi_map_resource_type_vals[] = {
3208 { 0, "Not used"},
3209 { 1, "DTMF tone detector"},
3210 { 2, "Automatic Speech Recognition - Speaker Independent - Digits"},
3211 { 3, "Automatic Speech Recognition - Speaker Independent - Speech User Interface Version 1"},
3212 { 0, NULL }
3214 #endif
3215 /* 6.5.2.df TriggerCapability */
3216 /* Updated with N.S0004 N.S0013-0 v 1.0*/
3218 static const true_false_string ansi_map_triggercapability_bool_val = {
3219 "triggers can be armed by the TriggerAddressList parameter",
3220 "triggers cannot be armed by the TriggerAddressList parameter"
3223 static void
3224 dissect_ansi_map_triggercapability(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
3226 int offset = 0;
3227 proto_tree *subtree;
3230 subtree = proto_item_add_subtree(actx->created_item, ett_triggercapability);
3233 /* O_No_Answer (ONA) (octet 1, bit H)*/
3234 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_ona, tvb, offset, 1, ENC_BIG_ENDIAN);
3235 /* O_Disconnect (ODISC) (octet 1, bit G)*/
3236 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_odisc, tvb, offset, 1, ENC_BIG_ENDIAN);
3237 /* O_Answer (OANS) (octet 1, bit F)*/
3238 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_oans, tvb, offset, 1, ENC_BIG_ENDIAN);
3239 /* Origination_Attempt_Authorized (OAA) (octet 1, bit E)*/
3240 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_oaa, tvb, offset, 1, ENC_BIG_ENDIAN);
3241 /* Revertive_Call (RvtC) (octet 1, bit D)*/
3242 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_rvtc, tvb, offset, 1, ENC_BIG_ENDIAN);
3243 /* All_Calls (All) (octet 1, bit C)*/
3244 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_all, tvb, offset, 1, ENC_BIG_ENDIAN);
3245 /* K-digit (K-digit) (octet 1, bit B)*/
3246 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_kdigit, tvb, offset, 1, ENC_BIG_ENDIAN);
3247 /* Introducing Star/Pound (INIT) (octet 1, bit A) */
3248 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_init, tvb, offset, 1, ENC_BIG_ENDIAN);
3249 offset++;
3252 /* O_Called_Party_Busy (OBSY) (octet 2, bit H)*/
3253 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_obsy, tvb, offset, 1, ENC_BIG_ENDIAN);
3254 /* Called_Routing_Address_Available (CdRAA) (octet 2, bit G)*/
3255 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_cdraa, tvb, offset, 1, ENC_BIG_ENDIAN);
3256 /* Initial_Termination (IT) (octet 2, bit F)*/
3257 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_it, tvb, offset, 1, ENC_BIG_ENDIAN);
3258 /* Calling_Routing_Address_Available (CgRAA)*/
3259 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_cgraa, tvb, offset, 1, ENC_BIG_ENDIAN);
3260 /* Advanced_Termination (AT) (octet 2, bit D)*/
3261 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_at, tvb, offset, 1, ENC_BIG_ENDIAN);
3262 /* Prior_Agreement (PA) (octet 2, bit C)*/
3263 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_pa, tvb, offset, 1, ENC_BIG_ENDIAN);
3264 /* Unrecognized_Number (Unrec) (octet 2, bit B)*/
3265 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_unrec, tvb, offset, 1, ENC_BIG_ENDIAN);
3266 /* Call Types (CT) (octet 2, bit A)*/
3267 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_ct, tvb, offset, 1, ENC_BIG_ENDIAN);
3268 offset++;
3269 /* */
3270 /* */
3271 /* */
3272 /* T_Disconnect (TDISC) (octet 3, bit E)*/
3273 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_tdisc, tvb, offset, 1, ENC_BIG_ENDIAN);
3274 /* T_Answer (TANS) (octet 3, bit D)*/
3275 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_tans, tvb, offset, 1, ENC_BIG_ENDIAN);
3276 /* T_No_Answer (TNA) (octet 3, bit C)*/
3277 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_tna, tvb, offset, 1, ENC_BIG_ENDIAN);
3278 /* T_Busy (TBusy) (octet 3, bit B)*/
3279 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_tbusy, tvb, offset, 1, ENC_BIG_ENDIAN);
3280 /* Terminating_Resource_Available (TRA) (octet 3, bit A) */
3281 proto_tree_add_item(subtree, hf_ansi_map_triggercapability_tra, tvb, offset, 1, ENC_BIG_ENDIAN);
3284 /* 6.5.2.ei DMH_ServiceID N.S0018 */
3286 /* 6.5.2.dj WINOperationsCapability */
3287 /* Updated with N.S0004 */
3288 /* ConnectResource (CONN) (octet 1, bit A) */
3289 static const true_false_string ansi_map_winoperationscapability_conn_bool_val = {
3290 "Sender is capable of supporting the ConnectResource, DisconnectResource, ConnectionFailureReport and ResetTimer (SSFT timer) operations",
3291 "Sender is not capable of supporting the ConnectResource, DisconnectResource,ConnectionFailureReport and ResetTimer (SSFT timer) operations"
3294 /* CallControlDirective (CCDIR) (octet 1, bit B) */
3295 static const true_false_string ansi_map_winoperationscapability_ccdir_bool_val = {
3296 "Sender is capable of supporting the CallControlDirective operation",
3297 "Sender is not capable of supporting the CallControlDirective operation"
3300 /* PositionRequest (POS) (octet 1, bit C) */
3301 static const true_false_string ansi_map_winoperationscapability_pos_bool_val = {
3302 "Sender is capable of supporting the PositionRequest operation",
3303 "Sender is not capable of supporting the PositionRequest operation"
3305 static void
3306 dissect_ansi_map_winoperationscapability(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
3308 int offset = 0;
3309 proto_tree *subtree;
3311 subtree = proto_item_add_subtree(actx->created_item, ett_winoperationscapability);
3313 /* PositionRequest (POS) (octet 1, bit C) */
3314 proto_tree_add_item(subtree, hf_ansi_map_winoperationscapability_pos, tvb, offset, 1, ENC_BIG_ENDIAN);
3315 /* CallControlDirective (CCDIR) (octet 1, bit B) */
3316 proto_tree_add_item(subtree, hf_ansi_map_winoperationscapability_ccdir, tvb, offset, 1, ENC_BIG_ENDIAN);
3317 /* ConnectResource (CONN) (octet 1, bit A) */
3318 proto_tree_add_item(subtree, hf_ansi_map_winoperationscapability_conn, tvb, offset, 1, ENC_BIG_ENDIAN);
3322 * 6.5.2.dk N.S0013-0 v 1.0,X.S0004-550-E v1.0 2.301
3323 * Code to be found after include functions.
3326 /* 6.5.2.ei TIA/EIA-41.5-D Modifications N.S0018Re */
3327 /* Octet 1,2 1st MarketID */
3328 /* Octet 3 1st MarketSegmentID */
3329 /* Octet 4,5 1st DMH_ServiceID value */
3330 /* Second marcet ID etc */
3331 /* 6.5.2.ek ControlNetworkID N.S0018*/
3332 static void
3333 dissect_ansi_map_controlnetworkid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
3335 int offset = 0;
3336 proto_tree *subtree;
3339 subtree = proto_item_add_subtree(actx->created_item, ett_controlnetworkid);
3340 /* MarketID octet 1 and 2 */
3341 proto_tree_add_item(subtree, hf_ansi_map_MarketID, tvb, offset, 2, ENC_BIG_ENDIAN);
3342 offset = offset + 2;
3343 /* Switch Number octet 3*/
3344 proto_tree_add_item(subtree, hf_ansi_map_swno, tvb, offset, 1, ENC_BIG_ENDIAN);
3345 offset++;
3349 /* 6.5.2.dk WIN_TriggerList N.S0013-0 v 1.0 */
3351 /* 6.5.2.ec DisplayText2 Updated in N.S0015-0*/
3353 /* 6.5.2.eq MSStatus N.S0004 */
3355 /* 6.5.2.er PositionInformationCode N.S0004 */
3357 /* 6.5.2.fd InterMessageTime N.S0015-0*/
3358 /* Timer value (in 10s of seconds) octet 1 */
3360 /* 6.5.2.fe MSIDUsage N.S0015-0 */
3361 /* M and I Report (octet 1, bits A and B) */
3362 static const value_string ansi_MSIDUsage_m_or_i_vals[] = {
3363 { 0, "Not used"},
3364 { 1, "MIN last used"},
3365 { 2, "IMSI last used"},
3366 { 3, "Reserved"},
3367 { 0, NULL }
3370 /* 6.5.2.ff NewMINExtension N.S0015-0 */
3372 #if 0
3373 /* 6.5.2.fv ACGEncountered N.S0023-0 v 1.0 */
3374 /* ACG Encountered (octet 1, bits A-F) */
3375 static const value_string ansi_ACGEncountered_vals[] = {
3376 { 0, "PC_SSN"},
3377 { 1, "1-digit control"},
3378 { 2, "2-digit control"},
3379 { 3, "3-digit control"},
3380 { 4, "4-digit control"},
3381 { 5, "5-digit control"},
3382 { 6, "6-digit control"},
3383 { 7, "7-digit control"},
3384 { 8, "8-digit control"},
3385 { 9, "9-digit control"},
3386 { 10, "10-digit control"},
3387 { 11, "11-digit control"},
3388 { 12, "12-digit control"},
3389 { 13, "13-digit control"},
3390 { 14, "14-digit control"},
3391 { 15, "15-digit control"},
3392 { 0, NULL }
3394 #endif
3395 #if 0
3396 /* Control Type (octet 1, bits G-H) */
3397 static const value_string ansi_ACGEncountered_cntrl_type_vals[] = {
3398 { 0, "Not used."},
3399 { 1, "Service Management System Initiated control encountered"},
3400 { 2, "SCF Overload control encountered"},
3401 { 3, "Reserved. Treat the same as value 0, Not used."},
3402 { 0, NULL }
3404 #endif
3406 /* 6.5.2.fw ControlType N.S0023-0 v 1.0 */
3410 #if 0
3411 /* 6.5.2.ge QoSPriority N.S0029-0 v1.0*/
3412 /* 6.5.2.xx QOSPriority */
3413 /* Non-Assured Priority (octet 1, bits A-D) */
3414 static const value_string ansi_map_Priority_vals[] = {
3415 { 0, "Priority Level 0. This is the lowest level"},
3416 { 1, "Priority Level 1"},
3417 { 2, "Priority Level 2"},
3418 { 3, "Priority Level 3"},
3419 { 4, "Priority Level 4"},
3420 { 5, "Priority Level 5"},
3421 { 6, "Priority Level 6"},
3422 { 7, "Priority Level 7"},
3423 { 8, "Priority Level 8"},
3424 { 8, "Priority Level 9"},
3425 { 10, "Priority Level 10"},
3426 { 11, "Priority Level 11"},
3427 { 12, "Priority Level 12"},
3428 { 13, "Priority Level 13"},
3429 { 14, "Reserved"},
3430 { 15, "Reserved"},
3431 { 0, NULL }
3433 #endif
3434 /* Assured Priority (octet 1, bits E-H)*/
3437 /* 6.5.2.gf PDSNAddress N.S0029-0 v1.0*/
3438 /* a. See IOS Handoff Request message for the definition of this field. */
3440 /* 6.5.2.gg PDSNProtocolType N.S0029-0 v1.0*/
3441 /* See IOS Handoff Request message for the definition of this field. */
3443 /* 6.5.2.gh CDMAMSMeasuredChannelIdentity N.S0029-0 v1.0*/
3445 /* 6.5.2.gl CallingPartyCategory N.S0027*/
3446 /* a. Refer to ITU-T Q.763 (Signalling System No. 7 ISDN user part formats and
3447 codes) for encoding of this parameter.
3448 b. Refer to national ISDN user part specifications for definitions and encoding of the
3449 reserved for national use values.
3451 /* 6.5.2.gm CDMA2000HandoffInvokeIOSData N.S0029-0 v1.0*/
3452 /* IOS A1 Element Handoff Invoke Information */
3455 /* 6.5.2.gn CDMA2000HandoffResponseIOSData */
3456 /* IOS A1 Element Handoff Response Information N.S0029-0 v1.0*/
3458 /* 6.5.2.gr CDMAServiceOptionConnectionIdentifier N.S0029-0 v1.0*/
3460 /* 6.5.2.fk GeographicPosition */
3461 /* Calling Geodetic Location (CGL)
3462 * a. See T1.628 for encoding.
3463 * b. Ignore extra octets, if received. Send only defined (or significant) octets.
3465 /* 6.5.2.fs PositionRequestType (See J-STD-036, page 8-47) X.S0002-0 v2.0
3468 /* Position Request Type (octet 1, bits A-H) */
3470 static const value_string ansi_map_Position_Request_Type_vals[] = {
3471 { 0, "Not used"},
3472 { 1, "Initial Position"},
3473 { 2, "Return the updated position"},
3474 { 3, "Return the updated or last known position"},
3475 { 4, "Reserved for LSP interface"},
3476 { 5, "Initial Position Only"},
3477 { 6, "Return the last known position"},
3478 { 7, "Return the updated position based on the serving cell identity"},
3481 values through 95 Reserved. Treat the same as value 1, Initial position.
3482 96 through 255 Reserved for TIA/EIA-41 protocol extension. If unknown, treat the
3483 same as value 1, Initial position.
3485 { 0, NULL }
3490 /* LCS Client Type (CTYP) (octet 2, bit A) *
3491 0 Emergency services LCS Client.
3492 1 Non-emergency services LCS Client.
3493 Call-Related Indicator (CALL) (octet 2, bit B)
3494 Decimal Value Meaning
3495 0 Call-related LCS Client request.
3496 1 Non call-related LCS Client request.
3498 Current Serving Cell Information for Coarse Position Determination (CELL) (octet 2, bit C)
3499 Decimal Value Meaning
3500 0 No specific request.
3501 1 Current serving cell information. Current serving cell information for
3502 Target MS requested. Radio contact with Target MS is required.
3504 /* 6.5.2.ft PositionResult *
3505 static const value_string ansi_map_PositionResult_vals[] = {
3506 { 0, "Not used"},
3507 { 1, "Initial position returned"},
3508 { 2, "Updated position returned"},
3509 { 3, "Last known position returned"},
3510 { 4, "Requested position is not available"},
3511 { 5, "Target MS disconnect"},
3512 { 6, "Target MS has handed-off"},
3513 { 7, "Identified MS is inactive or has roamed to another system"},
3514 { 8, "Unresponsive"},
3515 { 9, "Identified MS is responsive, but refused position request"},
3516 { 10, "System Failure"},
3517 { 11, "MSID is not known"},
3518 { 12, "Callback number is not known"},
3519 { 13, "Improper request"},
3520 { 14, "Mobile information returned"},
3521 { 15, "Signal not detected"},
3522 { 16, "PDE Timeout"},
3523 { 17, "Position pending"},
3524 { 18, "TDMA MAHO Information Returned"},
3525 { 19, "TDMA MAHO Information is not available"},
3526 { 20, "Access Denied"},
3527 { 21, "Requested PQOS not met"},
3528 { 22, "Resource required for CDMA handset-based position determination is currently unavailable"},
3529 { 23, "CDMA handset-based position determination failure"},
3530 { 24, "CDMA handset-based position determination failure detected by the PDE"},
3531 { 25, "CDMA handset-based position determination incomplete traffic channel requested for voice services"},
3532 { 26, "Emergency services call notification"},
3533 { 27, "Emergency services call precedence"},
3534 { 28, "Request acknowledged"},
3535 { 0, NULL }
3538 #if 0
3539 /* 6.5.2.bp-1 ServiceRedirectionCause value */
3540 static const value_string ansi_map_ServiceRedirectionCause_vals[] = {
3541 { 0, "Not used"},
3542 { 1, "NormalRegistration"},
3543 { 2, "SystemNotFound"},
3544 { 3, "ProtocolMismatch"},
3545 { 4, "RegistrationRejection"},
3546 { 5, "WrongSID"},
3547 { 6, "WrongNID"},
3548 { 0, NULL }
3550 #endif
3551 /* 6.5.2.mT AuthenticationResponseReauthentication N.S0011-0 v 1.0*/
3553 /* 6.5.2.vT ReauthenticationReport N.S0011-0 v 1.0*/
3554 static const value_string ansi_map_ReauthenticationReport_vals[] = {
3555 { 0, "Not used"},
3556 { 1, "Reauthentication not attempted"},
3557 { 2, "Reauthentication no response"},
3558 { 3, "Reauthentication successful"},
3559 { 4, "Reauthentication failed"},
3560 { 0, NULL }
3565 #if 0
3566 /* 6.5.2.lB AKeyProtocolVersion
3567 N.S0011-0 v 1.0
3569 static const value_string ansi_map_AKeyProtocolVersion_vals[] = {
3570 { 0, "Not used"},
3571 { 1, "A-key Generation not supported"},
3572 { 2, "Diffie Hellman with 768-bit modulus, 160-bit primitive, and 160-bit exponents"},
3573 { 3, "Diffie Hellman with 512-bit modulus, 160-bit primitive, and 160-bit exponents"},
3574 { 4, "Diffie Hellman with 768-bit modulus, 32-bit primitive, and 160-bit exponents"},
3575 { 0, NULL }
3577 #endif
3578 /* 6.5.2.sB OTASP_ResultCode
3579 N.S0011-0 v 1.0
3581 static const value_string ansi_map_OTASP_ResultCode_vals[] = {
3582 { 0, "Accepted - Successful"},
3583 { 1, "Rejected - Unknown cause."},
3584 { 2, "Computation Failure - E.g., unable to compute A-key"},
3585 { 3, "CSC Rejected - CSC challenge failure"},
3586 { 4, "Unrecognized OTASPCallEntry"},
3587 { 5, "Unsupported AKeyProtocolVersion(s)"},
3588 { 6, "Unable to Commit"},
3589 { 0, NULL }
3592 /*6.5.2.wB ServiceIndicator
3593 N.S0011-0 v 1.0
3595 static const value_string ansi_map_ServiceIndicator_vals[] = {
3596 { 0, "Undefined Service"},
3597 { 1, "CDMA OTASP Service"},
3598 { 2, "TDMA OTASP Service"},
3599 { 3, "CDMA OTAPA Service"},
3600 { 4, "CDMA Position Determination Service (Emergency Services)"},
3601 { 5, "AMPS Position Determination Service (Emergency Services)"},
3602 { 6, "CDMA Position Determination Service (Value Added Services)"},
3603 { 0, NULL }
3606 /* 6.5.2.xB SignalingMessageEncryptionReport
3607 N.S0011-0 v 1.0
3609 static const value_string ansi_map_SMEReport_vals[] = {
3610 { 0, "Not used"},
3611 { 1, "Signaling Message Encryption enabling not attempted"},
3612 { 2, "Signaling Message Encryption enabling no response"},
3613 { 3, "Signaling Message Encryption is enabled"},
3614 { 4, "Signaling Message Encryption enabling failed"},
3615 { 0, NULL }
3618 /* 6.5.2.zB VoicePrivacyReport
3619 N.S0011-0 v 1.0
3621 static const value_string ansi_map_VoicePrivacyReport_vals[] = {
3622 { 0, "Not used"},
3623 { 1, "Voice Privacy not attempted"},
3624 { 2, "Voice Privacy no response"},
3625 { 3, "Voice Privacy is active"},
3626 { 4, "Voice Privacy failed"},
3627 { 0, NULL }
3631 #include "packet-ansi_map-fn.c"
3634 * 6.5.2.dk N.S0013-0 v 1.0,X.S0004-550-E v1.0 2.301
3636 static void
3637 dissect_ansi_map_win_trigger_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree _U_, asn1_ctx_t *actx _U_){
3639 int offset = 0;
3640 int end_offset = 0;
3641 int j = 0;
3642 proto_tree *subtree;
3643 guint8 octet;
3645 end_offset = tvb_length_remaining(tvb,offset);
3646 subtree = proto_item_add_subtree(actx->created_item, ett_win_trigger_list);
3648 while(offset< end_offset) {
3649 octet = tvb_get_guint8(tvb,offset);
3650 switch (octet){
3651 case 0xdc:
3652 proto_tree_add_text(subtree, tvb, offset, 1, "TDP-R's armed");
3653 j=0;
3654 break;
3655 case 0xdd:
3656 proto_tree_add_text(subtree, tvb, offset, 1, "TDP-N's armed");
3657 j=0;
3658 break;
3659 case 0xde:
3660 proto_tree_add_text(subtree, tvb, offset, 1, "EDP-R's armed");
3661 j=0;
3662 break;
3663 case 0xdf:
3664 proto_tree_add_text(subtree, tvb, offset, 1, "EDP-N's armed");
3665 j=0;
3666 break;
3667 default:
3668 proto_tree_add_text(subtree, tvb, offset, 1, "[%u] (%u) %s",j,octet,val_to_str_ext(octet, &ansi_map_TriggerType_vals_ext, "Unknown TriggerType (%u)"));
3669 j++;
3670 break;
3672 offset++;
3677 static int dissect_invokeData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx) {
3678 static gboolean opCodeKnown = TRUE;
3679 static ansi_map_tap_rec_t tap_rec[16];
3680 static ansi_map_tap_rec_t *tap_p;
3681 static int tap_current=0;
3684 * set tap record pointer
3686 tap_current++;
3687 if (tap_current == array_length(tap_rec))
3689 tap_current = 0;
3691 tap_p = &tap_rec[tap_current];
3693 switch(OperationCode){
3694 case 1: /*Handoff Measurement Request*/
3695 offset = dissect_ansi_map_HandoffMeasurementRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_handoffMeasurementRequest);
3696 break;
3697 case 2: /*Facilities Directive*/
3698 offset = dissect_ansi_map_FacilitiesDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_facilitiesDirective);
3699 break;
3700 case 3: /*Mobile On Channel*/
3701 proto_tree_add_text(tree, tvb, offset, -1, "[Carries no data]");
3702 break;
3703 case 4: /*Handoff Back*/
3704 offset = dissect_ansi_map_HandoffBack(TRUE, tvb, offset, actx, tree, hf_ansi_map_handoffBack);
3705 break;
3706 case 5: /*Facilities Release*/
3707 offset = dissect_ansi_map_FacilitiesRelease(TRUE, tvb, offset, actx, tree, hf_ansi_map_facilitiesRelease);
3708 break;
3709 case 6: /*Qualification Request*/
3710 offset = dissect_ansi_map_QualificationRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_qualificationRequest);
3711 break;
3712 case 7: /*Qualification Directive*/
3713 offset = dissect_ansi_map_QualificationDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_qualificationDirective);
3714 break;
3715 case 8: /*Blocking*/
3716 offset = dissect_ansi_map_Blocking(TRUE, tvb, offset, actx, tree, hf_ansi_map_blocking);
3717 break;
3718 case 9: /*Unblocking*/
3719 offset = dissect_ansi_map_Unblocking(TRUE, tvb, offset, actx, tree, hf_ansi_map_unblocking);
3720 break;
3721 case 10: /*Reset Circuit*/
3722 offset = dissect_ansi_map_ResetCircuit(TRUE, tvb, offset, actx, tree, hf_ansi_map_resetCircuit);
3723 break;
3724 case 11: /*Trunk Test*/
3725 offset = dissect_ansi_map_TrunkTest(TRUE, tvb, offset, actx, tree, hf_ansi_map_trunkTest);
3726 break;
3727 case 12: /*Trunk Test Disconnect*/
3728 offset = dissect_ansi_map_TrunkTestDisconnect(TRUE, tvb, offset, actx, tree, hf_ansi_map_trunkTestDisconnect);
3729 break;
3730 case 13: /*Registration Notification*/
3731 offset = dissect_ansi_map_RegistrationNotification(TRUE, tvb, offset, actx, tree, hf_ansi_map_registrationNotification);
3732 break;
3733 case 14: /*Registration Cancellation*/
3734 offset = dissect_ansi_map_RegistrationCancellation(TRUE, tvb, offset, actx, tree, hf_ansi_map_registrationCancellation);
3735 break;
3736 case 15: /*Location Request*/
3737 offset = dissect_ansi_map_LocationRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_locationRequest);
3738 break;
3739 case 16: /*Routing Request*/
3740 offset = dissect_ansi_map_RoutingRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_routingRequest);
3741 break;
3742 case 17: /*Feature Request*/
3743 offset = dissect_ansi_map_FeatureRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_featureRequest);
3744 break;
3745 case 18: /*Reserved 18 (Service Profile Request, IS-41-C)*/
3746 proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob(18 (Service Profile Request, IS-41-C)");
3747 break;
3748 case 19: /*Reserved 19 (Service Profile Directive, IS-41-C)*/
3749 proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob(19 Service Profile Directive, IS-41-C)");
3750 break;
3751 case 20: /*Unreliable Roamer Data Directive*/
3752 offset = dissect_ansi_map_UnreliableRoamerDataDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_unreliableRoamerDataDirective);
3753 break;
3754 case 21: /*Reserved 21 (Call Data Request, IS-41-C)*/
3755 proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob(Reserved 21 (Call Data Request, IS-41-C)");
3756 break;
3757 case 22: /*MS Inactive*/
3758 offset = dissect_ansi_map_MSInactive(TRUE, tvb, offset, actx, tree, hf_ansi_map_mSInactive);
3759 break;
3760 case 23: /*Transfer To Number Request*/
3761 offset = dissect_ansi_map_TransferToNumberRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_transferToNumberRequest);
3762 break;
3763 case 24: /*Redirection Request*/
3764 offset = dissect_ansi_map_RedirectionRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_redirectionRequest);
3765 break;
3766 case 25: /*Handoff To Third*/
3767 offset = dissect_ansi_map_HandoffToThird(TRUE, tvb, offset, actx, tree, hf_ansi_map_handoffToThird);
3768 break;
3769 case 26: /*Flash Request*/
3770 offset = dissect_ansi_map_FlashRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_flashRequest);
3771 break;
3772 case 27: /*Authentication Directive*/
3773 offset = dissect_ansi_map_AuthenticationDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_authenticationDirective);
3774 break;
3775 case 28: /*Authentication Request*/
3776 offset = dissect_ansi_map_AuthenticationRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_authenticationRequest);
3777 break;
3778 case 29: /*Base Station Challenge*/
3779 offset = dissect_ansi_map_BaseStationChallenge(TRUE, tvb, offset, actx, tree, hf_ansi_map_baseStationChallenge);
3780 break;
3781 case 30: /*Authentication Failure Report*/
3782 offset = dissect_ansi_map_AuthenticationFailureReport(TRUE, tvb, offset, actx, tree, hf_ansi_map_authenticationFailureReport);
3783 break;
3784 case 31: /*Count Request*/
3785 offset = dissect_ansi_map_CountRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_countRequest);
3786 break;
3787 case 32: /*Inter System Page*/
3788 offset = dissect_ansi_map_InterSystemPage(TRUE, tvb, offset, actx, tree, hf_ansi_map_interSystemPage);
3789 break;
3790 case 33: /*Unsolicited Response*/
3791 offset = dissect_ansi_map_UnsolicitedResponse(TRUE, tvb, offset, actx, tree, hf_ansi_map_unsolicitedResponse);
3792 break;
3793 case 34: /*Bulk Deregistration*/
3794 offset = dissect_ansi_map_BulkDeregistration(TRUE, tvb, offset, actx, tree, hf_ansi_map_bulkDeregistration);
3795 break;
3796 case 35: /*Handoff Measurement Request 2*/
3797 offset = dissect_ansi_map_HandoffMeasurementRequest2(TRUE, tvb, offset, actx, tree, hf_ansi_map_handoffMeasurementRequest2);
3798 break;
3799 case 36: /*Facilities Directive 2*/
3800 offset = dissect_ansi_map_FacilitiesDirective2(TRUE, tvb, offset, actx, tree, hf_ansi_map_facilitiesDirective2);
3801 break;
3802 case 37: /*Handoff Back 2*/
3803 offset = dissect_ansi_map_HandoffBack2(TRUE, tvb, offset, actx, tree, hf_ansi_map_handoffBack2);
3804 break;
3805 case 38: /*Handoff To Third 2*/
3806 offset = dissect_ansi_map_HandoffToThird2(TRUE, tvb, offset, actx, tree, hf_ansi_map_handoffToThird2);
3807 break;
3808 case 39: /*Authentication Directive Forward*/
3809 offset = dissect_ansi_map_AuthenticationDirectiveForward(TRUE, tvb, offset, actx, tree, hf_ansi_map_authenticationDirectiveForward);
3810 break;
3811 case 40: /*Authentication Status Report*/
3812 offset = dissect_ansi_map_AuthenticationStatusReport(TRUE, tvb, offset, actx, tree, hf_ansi_map_authenticationStatusReport);
3813 break;
3814 case 41: /*Reserved 41*/
3815 proto_tree_add_text(tree, tvb, offset, -1, "Reserved 41, Unknown invokeData blob");
3816 break;
3817 case 42: /*Information Directive*/
3818 offset = dissect_ansi_map_InformationDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_informationDirective);
3819 break;
3820 case 43: /*Information Forward*/
3821 offset = dissect_ansi_map_InformationForward(TRUE, tvb, offset, actx, tree, hf_ansi_map_informationForward);
3822 break;
3823 case 44: /*Inter System Answer*/
3824 offset = dissect_ansi_map_InterSystemAnswer(TRUE, tvb, offset, actx, tree, hf_ansi_map_interSystemAnswer);
3825 break;
3826 case 45: /*Inter System Page 2*/
3827 offset = dissect_ansi_map_InterSystemPage2(TRUE, tvb, offset, actx, tree, hf_ansi_map_interSystemPage2);
3828 break;
3829 case 46: /*Inter System Setup*/
3830 offset = dissect_ansi_map_InterSystemSetup(TRUE, tvb, offset, actx, tree, hf_ansi_map_interSystemSetup);
3831 break;
3832 case 47: /*OriginationRequest*/
3833 offset = dissect_ansi_map_OriginationRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_originationRequest);
3834 break;
3835 case 48: /*Random Variable Request*/
3836 offset = dissect_ansi_map_RandomVariableRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_randomVariableRequest);
3837 break;
3838 case 49: /*Redirection Directive*/
3839 offset = dissect_ansi_map_RedirectionDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_redirectionDirective);
3840 break;
3841 case 50: /*Remote User Interaction Directive*/
3842 offset = dissect_ansi_map_RemoteUserInteractionDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_remoteUserInteractionDirective);
3843 break;
3844 case 51: /*SMS Delivery Backward*/
3845 offset = dissect_ansi_map_SMSDeliveryBackward(TRUE, tvb, offset, actx, tree, hf_ansi_map_sMSDeliveryBackward);
3846 break;
3847 case 52: /*SMS Delivery Forward*/
3848 offset = dissect_ansi_map_SMSDeliveryForward(TRUE, tvb, offset, actx, tree, hf_ansi_map_sMSDeliveryForward);
3849 break;
3850 case 53: /*SMS Delivery Point to Point*/
3851 offset = dissect_ansi_map_SMSDeliveryPointToPoint(TRUE, tvb, offset, actx, tree, hf_ansi_map_sMSDeliveryPointToPoint);
3852 break;
3853 case 54: /*SMS Notification*/
3854 offset = dissect_ansi_map_SMSNotification(TRUE, tvb, offset, actx, tree, hf_ansi_map_sMSNotification);
3855 break;
3856 case 55: /*SMS Request*/
3857 offset = dissect_ansi_map_SMSRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_sMSRequest);
3858 break;
3859 /* End N.S0005*/
3860 /* N.S0010-0 v 1.0 */
3861 /* N.S0011-0 v 1.0 */
3862 case 56: /*OTASP Request 6.4.2.CC*/
3863 offset = dissect_ansi_map_OTASPRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_oTASPRequest);
3864 break;
3865 /*End N.S0011-0 v 1.0 */
3866 case 57: /*Information Backward*/
3867 break;
3868 /* N.S0008-0 v 1.0 */
3869 case 58: /*Change Facilities*/
3870 offset = dissect_ansi_map_ChangeFacilities(TRUE, tvb, offset, actx, tree, hf_ansi_map_changeFacilities);
3871 break;
3872 case 59: /*Change Service*/
3873 offset = dissect_ansi_map_ChangeService(TRUE, tvb, offset, actx, tree, hf_ansi_map_changeService);
3874 break;
3875 /* End N.S0008-0 v 1.0 */
3876 case 60: /*Parameter Request*/
3877 offset = dissect_ansi_map_ParameterRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_parameterRequest);
3878 break;
3879 case 61: /*TMSI Directive*/
3880 offset = dissect_ansi_map_TMSIDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_tMSIDirective);
3881 break;
3882 /*End N.S0010-0 v 1.0 */
3883 case 62: /*NumberPortabilityRequest 62*/
3884 offset = dissect_ansi_map_NumberPortabilityRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_numberPortabilityRequest);
3885 break;
3886 case 63: /*Service Request N.S0012-0 v 1.0*/
3887 offset = dissect_ansi_map_ServiceRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_serviceRequest);
3888 break;
3889 /* N.S0013 */
3890 case 64: /*Analyzed Information Request*/
3891 offset = dissect_ansi_map_AnalyzedInformation(TRUE, tvb, offset, actx, tree, hf_ansi_map_analyzedInformation);
3892 break;
3893 case 65: /*Connection Failure Report*/
3894 offset = dissect_ansi_map_ConnectionFailureReport(TRUE, tvb, offset, actx, tree, hf_ansi_map_connectionFailureReport);
3895 break;
3896 case 66: /*Connect Resource*/
3897 offset = dissect_ansi_map_ConnectResource(TRUE, tvb, offset, actx, tree, hf_ansi_map_connectResource);
3898 break;
3899 case 67: /*Disconnect Resource*/
3900 /* No data */
3901 break;
3902 case 68: /*Facility Selected and Available*/
3903 offset = dissect_ansi_map_FacilitySelectedAndAvailable(TRUE, tvb, offset, actx, tree, hf_ansi_map_facilitySelectedAndAvailable);
3904 break;
3905 case 69: /*Instruction Request*/
3906 /* No data */
3907 break;
3908 case 70: /*Modify*/
3909 offset = dissect_ansi_map_Modify(TRUE, tvb, offset, actx, tree, hf_ansi_map_modify);
3910 break;
3911 case 71: /*Reset Timer*/
3912 /*No Data*/
3913 break;
3914 case 72: /*Search*/
3915 offset = dissect_ansi_map_Search(TRUE, tvb, offset, actx, tree, hf_ansi_map_search);
3916 break;
3917 case 73: /*Seize Resource*/
3918 offset = dissect_ansi_map_SeizeResource(TRUE, tvb, offset, actx, tree, hf_ansi_map_seizeResource);
3919 break;
3920 case 74: /*SRF Directive*/
3921 offset = dissect_ansi_map_SRFDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_sRFDirective);
3922 break;
3923 case 75: /*T Busy*/
3924 offset = dissect_ansi_map_TBusy(TRUE, tvb, offset, actx, tree, hf_ansi_map_tBusy);
3925 break;
3926 case 76: /*T NoAnswer*/
3927 offset = dissect_ansi_map_TNoAnswer(TRUE, tvb, offset, actx, tree, hf_ansi_map_tNoAnswer);
3928 break;
3929 /*END N.S0013 */
3930 case 77: /*Release*/
3931 break;
3932 case 78: /*SMS Delivery Point to Point Ack*/
3933 offset = dissect_ansi_map_SMSDeliveryPointToPointAck(TRUE, tvb, offset, actx, tree, hf_ansi_map_smsDeliveryPointToPointAck);
3934 break;
3935 /* N.S0024*/
3936 case 79: /*Message Directive*/
3937 offset = dissect_ansi_map_MessageDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_messageDirective);
3938 break;
3939 /*END N.S0024*/
3940 /* N.S0018 PN-4287*/
3941 case 80: /*Bulk Disconnection*/
3942 offset = dissect_ansi_map_BulkDisconnection(TRUE, tvb, offset, actx, tree, hf_ansi_map_bulkDisconnection);
3943 break;
3944 case 81: /*Call Control Directive*/
3945 offset = dissect_ansi_map_CallControlDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_callControlDirective);
3946 break;
3947 case 82: /*O Answer*/
3948 offset = dissect_ansi_map_OAnswer(TRUE, tvb, offset, actx, tree, hf_ansi_map_oAnswer);
3949 break;
3950 case 83: /*O Disconnect*/
3951 offset = dissect_ansi_map_ODisconnect(TRUE, tvb, offset, actx, tree, hf_ansi_map_oDisconnect);
3952 break;
3953 case 84: /*Call Recovery Report*/
3954 offset = dissect_ansi_map_CallRecoveryReport(TRUE, tvb, offset, actx, tree, hf_ansi_map_callRecoveryReport);
3955 break;
3956 case 85: /*T Answer*/
3957 offset = dissect_ansi_map_TAnswer(TRUE, tvb, offset, actx, tree, hf_ansi_map_tAnswer);
3958 break;
3959 case 86: /*T Disconnect*/
3960 offset = dissect_ansi_map_TDisconnect(TRUE, tvb, offset, actx, tree, hf_ansi_map_tDisconnect);
3961 break;
3962 case 87: /*Unreliable Call Data*/
3963 offset = dissect_ansi_map_UnreliableCallData(TRUE, tvb, offset, actx, tree, hf_ansi_map_unreliableCallData);
3964 break;
3965 /* N.S0018 PN-4287*/
3966 /*N.S0004 */
3967 case 88: /*O CalledPartyBusy*/
3968 offset = dissect_ansi_map_OCalledPartyBusy(TRUE, tvb, offset, actx, tree, hf_ansi_map_oCalledPartyBusy);
3969 break;
3970 case 89: /*O NoAnswer*/
3971 offset = dissect_ansi_map_ONoAnswer(TRUE, tvb, offset, actx, tree, hf_ansi_map_oNoAnswer);
3972 break;
3973 case 90: /*Position Request*/
3974 offset = dissect_ansi_map_PositionRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_positionRequest);
3975 break;
3976 case 91: /*Position Request Forward*/
3977 offset = dissect_ansi_map_PositionRequestForward(TRUE, tvb, offset, actx, tree, hf_ansi_map_positionRequestForward);
3978 break;
3979 /*END N.S0004 */
3980 case 92: /*Call Termination Report*/
3981 offset = dissect_ansi_map_CallTerminationReport(TRUE, tvb, offset, actx, tree, hf_ansi_map_callTerminationReport);
3982 break;
3983 case 93: /*Geo Position Directive*/
3984 break;
3985 case 94: /*Geo Position Request*/
3986 offset = dissect_ansi_map_GeoPositionRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_interSystemPositionRequest);
3987 break;
3988 case 95: /*Inter System Position Request*/
3989 offset = dissect_ansi_map_InterSystemPositionRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_interSystemPositionRequest);
3990 break;
3991 case 96: /*Inter System Position Request Forward*/
3992 offset = dissect_ansi_map_InterSystemPositionRequestForward(TRUE, tvb, offset, actx, tree, hf_ansi_map_interSystemPositionRequestForward);
3993 break;
3994 /* 3GPP2 N.S0023-0 */
3995 case 97: /*ACG Directive*/
3996 offset = dissect_ansi_map_ACGDirective(TRUE, tvb, offset, actx, tree, hf_ansi_map_aCGDirective);
3997 break;
3998 /* END 3GPP2 N.S0023-0 */
3999 case 98: /*Roamer Database Verification Request*/
4000 offset = dissect_ansi_map_RoamerDatabaseVerificationRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_roamerDatabaseVerificationRequest);
4001 break;
4002 /* N.S0029 X.S0001-A v1.0*/
4003 case 99: /*Add Service*/
4004 offset = dissect_ansi_map_AddService(TRUE, tvb, offset, actx, tree, hf_ansi_map_addService);
4005 break;
4006 case 100: /*Drop Service*/
4007 offset = dissect_ansi_map_DropService(TRUE, tvb, offset, actx, tree, hf_ansi_map_dropService);
4008 break;
4009 /*End N.S0029 X.S0001-A v1.0*/
4010 /* X.S0002-0 v1.0 */
4011 /* LCSParameterRequest */
4012 case 101: /* InterSystemSMSPage 101 */
4013 offset = dissect_ansi_map_InterSystemSMSPage(TRUE, tvb, offset, actx, tree, hf_ansi_map_interSystemSMSPage);
4014 break;
4015 case 102:
4016 offset = dissect_ansi_map_LCSParameterRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_lcsParameterRequest);
4017 break;
4018 /* CheckMEID X.S0008-0 v1.0*/
4019 case 104:
4020 offset = dissect_ansi_map_CheckMEID(TRUE, tvb, offset, actx, tree, hf_ansi_map_checkMEID);
4021 break;
4022 /* PositionEventNotification */
4023 case 106:
4024 offset = dissect_ansi_map_PositionEventNotification(TRUE, tvb, offset, actx, tree, hf_ansi_map_positionEventNotification);
4025 break;
4026 case 107:
4027 /* StatusRequest X.S0008-0 v1.0*/
4028 offset = dissect_ansi_map_StatusRequest(TRUE, tvb, offset, actx, tree, hf_ansi_map_statusRequest);
4029 break;
4030 /* InterSystemSMSDelivery-PointToPoint 111 X.S0004-540-E v2.0*/
4031 case 111:
4032 /* InterSystemSMSDeliveryPointToPoint X.S0004-540-E v2.0 */
4033 offset = dissect_ansi_map_InterSystemSMSDeliveryPointToPoint(TRUE, tvb, offset, actx, tree, hf_ansi_map_interSystemSMSDeliveryPointToPoint);
4034 break;
4035 case 112:
4036 /* QualificationRequest2 112 X.S0004-540-E v2.0*/
4037 offset = dissect_ansi_map_QualificationRequest2(TRUE, tvb, offset, actx, tree, hf_ansi_map_qualificationRequest2);
4038 break;
4039 default:
4040 proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob");
4041 opCodeKnown = FALSE;
4042 break;
4045 if (opCodeKnown)
4047 tap_p->message_type = OperationCode;
4048 tap_p->size = 0; /* should be number of octets in message */
4050 tap_queue_packet(ansi_map_tap, g_pinfo, tap_p);
4053 return offset;
4056 static int dissect_returnData(proto_tree *tree, tvbuff_t *tvb, int offset, asn1_ctx_t *actx) {
4057 static gboolean opCodeKnown = TRUE;
4058 static ansi_map_tap_rec_t tap_rec[16];
4059 static ansi_map_tap_rec_t *tap_p;
4060 static int tap_current=0;
4063 * set tap record pointer
4065 tap_current++;
4066 if (tap_current == array_length(tap_rec))
4068 tap_current = 0;
4070 tap_p = &tap_rec[tap_current];
4072 switch(OperationCode){
4073 case 1: /*Handoff Measurement Request*/
4074 offset = dissect_ansi_map_HandoffMeasurementRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_handoffMeasurementRequestRes);
4075 break;
4076 case 2: /*Facilities Directive*/
4077 offset = dissect_ansi_map_FacilitiesDirectiveRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_facilitiesDirectiveRes);
4078 break;
4079 case 4: /*Handoff Back*/
4080 offset = dissect_ansi_map_HandoffBackRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_handoffBackRes);
4081 break;
4082 case 5: /*Facilities Release*/
4083 offset = dissect_ansi_map_FacilitiesReleaseRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_facilitiesReleaseRes);
4084 break;
4085 case 6: /*Qualification Request*/
4086 offset = dissect_ansi_map_QualificationRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_qualificationRequestRes);
4087 break;
4088 case 7: /*Qualification Directive*/
4089 offset = dissect_ansi_map_QualificationDirectiveRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_qualificationDirectiveRes);
4090 break;
4091 case 10: /*Reset Circuit*/
4092 offset = dissect_ansi_map_ResetCircuitRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_resetCircuitRes);
4093 break;
4094 case 13: /*Registration Notification*/
4095 offset = dissect_ansi_map_RegistrationNotificationRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_registrationNotificationRes);
4096 break;
4097 case 14: /*Registration Cancellation*/
4098 offset = dissect_ansi_map_RegistrationCancellationRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_registrationCancellationRes);
4099 break;
4100 case 15: /*Location Request*/
4101 offset = dissect_ansi_map_LocationRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_locationRequestRes);
4102 break;
4103 case 16: /*Routing Request*/
4104 offset = dissect_ansi_map_RoutingRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_routingRequestRes);
4105 break;
4106 case 17: /*Feature Request*/
4107 offset = dissect_ansi_map_FeatureRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_featureRequestRes);
4108 break;
4109 case 23: /*Transfer To Number Request*/
4110 offset = dissect_ansi_map_TransferToNumberRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_transferToNumberRequestRes);
4111 break;
4112 case 25: /*Handoff To Third*/
4113 offset = dissect_ansi_map_HandoffToThirdRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_handoffToThirdRes);
4114 break;
4115 case 26: /*Flash Request*/
4116 /* No data */
4117 proto_tree_add_text(tree, tvb, offset, -1, "No Data");
4118 break;
4119 case 27: /*Authentication Directive*/
4120 offset = dissect_ansi_map_AuthenticationDirectiveRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_authenticationDirectiveRes);
4121 break;
4122 case 28: /*Authentication Request*/
4123 offset = dissect_ansi_map_AuthenticationRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_authenticationRequestRes);
4124 break;
4125 case 29: /*Base Station Challenge*/
4126 offset = dissect_ansi_map_BaseStationChallengeRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_baseStationChallengeRes);
4127 break;
4128 case 30: /*Authentication Failure Report*/
4129 offset = dissect_ansi_map_AuthenticationFailureReportRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_authenticationFailureReportRes);
4130 break;
4131 case 31: /*Count Request*/
4132 offset = dissect_ansi_map_CountRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_countRequestRes);
4133 break;
4134 case 32: /*Inter System Page*/
4135 offset = dissect_ansi_map_InterSystemPageRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_interSystemPageRes);
4136 break;
4137 case 33: /*Unsolicited Response*/
4138 offset = dissect_ansi_map_UnsolicitedResponseRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_unsolicitedResponseRes);
4139 break;
4140 case 35: /*Handoff Measurement Request 2*/
4141 offset = dissect_ansi_map_HandoffMeasurementRequest2Res(TRUE, tvb, offset, actx, tree, hf_ansi_map_handoffMeasurementRequest2Res);
4142 break;
4143 case 36: /*Facilities Directive 2*/
4144 offset = dissect_ansi_map_FacilitiesDirective2Res(TRUE, tvb, offset, actx, tree, hf_ansi_map_facilitiesDirective2Res);
4145 break;
4146 case 37: /*Handoff Back 2*/
4147 offset = dissect_ansi_map_HandoffBack2Res(TRUE, tvb, offset, actx, tree, hf_ansi_map_handoffBack2Res);
4148 break;
4149 case 38: /*Handoff To Third 2*/
4150 offset = dissect_ansi_map_HandoffToThird2Res(TRUE, tvb, offset, actx, tree, hf_ansi_map_handoffToThird2Res);
4151 break;
4152 case 39: /*Authentication Directive Forward*/
4153 offset = dissect_ansi_map_AuthenticationDirectiveForwardRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_authenticationDirectiveForwardRes);
4154 break;
4155 case 40: /*Authentication Status Report*/
4156 offset = dissect_ansi_map_AuthenticationStatusReportRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_authenticationStatusReportRes);
4157 break;
4158 /*Reserved 41*/
4159 case 42: /*Information Directive*/
4160 offset = dissect_ansi_map_InformationDirectiveRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_informationDirectiveRes);
4161 break;
4162 case 43: /*Information Forward*/
4163 offset = dissect_ansi_map_InformationForwardRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_informationForwardRes);
4164 break;
4165 case 45: /*Inter System Page 2*/
4166 offset = dissect_ansi_map_InterSystemPage2Res(TRUE, tvb, offset, actx, tree, hf_ansi_map_interSystemPage2Res);
4167 break;
4168 case 46: /*Inter System Setup*/
4169 offset = dissect_ansi_map_InterSystemSetupRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_interSystemSetupRes);
4170 break;
4171 case 47: /*OriginationRequest*/
4172 offset = dissect_ansi_map_OriginationRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_originationRequestRes);
4173 break;
4174 case 48: /*Random Variable Request*/
4175 offset = dissect_ansi_map_RandomVariableRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_randomVariableRequestRes);
4176 break;
4177 case 50: /*Remote User Interaction Directive*/
4178 offset = dissect_ansi_map_RemoteUserInteractionDirectiveRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_remoteUserInteractionDirectiveRes);
4179 break;
4180 case 51: /*SMS Delivery Backward*/
4181 offset = dissect_ansi_map_SMSDeliveryBackwardRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_sMSDeliveryBackwardRes);
4182 break;
4183 case 52: /*SMS Delivery Forward*/
4184 offset = dissect_ansi_map_SMSDeliveryForwardRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_sMSDeliveryForwardRes);
4185 break;
4186 case 53: /*SMS Delivery Point to Point*/
4187 offset = dissect_ansi_map_SMSDeliveryPointToPointRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_sMSDeliveryPointToPointRes);
4188 break;
4189 case 54: /*SMS Notification*/
4190 offset = dissect_ansi_map_SMSNotificationRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_sMSNotificationRes);
4191 break;
4192 case 55: /*SMS Request*/
4193 offset = dissect_ansi_map_SMSRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_sMSRequestRes);
4194 break;
4195 /* N.S0008-0 v 1.0 */
4196 case 56: /*OTASP Request 6.4.2.CC*/
4197 offset = dissect_ansi_map_OTASPRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_oTASPRequestRes);
4198 break;
4199 /* 57 Information Backward*/
4200 case 58: /*Change Facilities*/
4201 offset = dissect_ansi_map_ChangeFacilitiesRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_changeFacilitiesRes);
4202 break;
4203 case 59: /*Change Service*/
4204 offset = dissect_ansi_map_ChangeServiceRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_changeServiceRes);
4205 break;
4206 case 60: /*Parameter Request*/
4207 offset = dissect_ansi_map_ParameterRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_parameterRequestRes);
4208 break;
4209 case 61: /*TMSI Directive*/
4210 offset = dissect_ansi_map_TMSIDirectiveRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_tMSIDirectiveRes);
4211 break;
4212 case 62: /*NumberPortabilityRequest */
4213 offset = dissect_ansi_map_NumberPortabilityRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_numberPortabilityRequestRes);
4214 break;
4215 case 63: /*Service Request*/
4216 offset = dissect_ansi_map_ServiceRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_serviceRequestRes);
4217 break;
4218 /* N.S0013 */
4219 case 64: /*Analyzed Information Request*/
4220 offset = dissect_ansi_map_AnalyzedInformationRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_analyzedInformationRes);
4221 break;
4222 /* 65 Connection Failure Report*/
4223 /* 66 Connect Resource*/
4224 /* 67 Disconnect Resource*/
4225 case 68: /*Facility Selected and Available*/
4226 offset = dissect_ansi_map_FacilitySelectedAndAvailableRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_facilitySelectedAndAvailableRes);
4227 break;
4228 /* 69 Instruction Request*/
4229 case 70: /*Modify*/
4230 offset = dissect_ansi_map_ModifyRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_modifyRes);
4231 break;
4232 case 72: /*Search*/
4233 offset = dissect_ansi_map_SearchRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_searchRes);;
4234 break;
4235 case 73: /*Seize Resource*/
4236 offset = dissect_ansi_map_SeizeResourceRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_seizeResourceRes);
4237 break;
4238 case 74: /*SRF Directive*/
4239 offset = dissect_ansi_map_SRFDirectiveRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_sRFDirectiveRes);
4240 break;
4241 case 75: /*T Busy*/
4242 offset = dissect_ansi_map_TBusyRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_tBusyRes);
4243 break;
4244 case 76: /*T NoAnswer*/
4245 offset = dissect_ansi_map_TNoAnswerRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_tNoAnswerRes);
4246 break;
4247 case 81: /*Call Control Directive*/
4248 offset = dissect_ansi_map_CallControlDirectiveRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_callControlDirectiveRes);
4249 break;
4250 case 83: /*O Disconnect*/
4251 offset = dissect_ansi_map_ODisconnectRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_oDisconnectRes);
4252 break;
4253 case 86: /*T Disconnect*/
4254 offset = dissect_ansi_map_TDisconnectRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_tDisconnectRes);
4255 break;
4256 case 88: /*O CalledPartyBusy*/
4257 offset = dissect_ansi_map_OCalledPartyBusyRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_oCalledPartyBusyRes);
4258 break;
4259 case 89: /*O NoAnswer*/
4260 offset = dissect_ansi_map_ONoAnswerRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_oNoAnswerRes);
4261 break;
4262 case 90: /*Position Request*/
4263 offset = dissect_ansi_map_PositionRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_positionRequestRes);
4264 break;
4265 case 91: /*Position Request Forward*/
4266 offset = dissect_ansi_map_PositionRequestForwardRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_positionRequestForwardRes);
4267 break;
4268 case 95: /*Inter System Position Request*/
4269 offset = dissect_ansi_map_InterSystemPositionRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_interSystemPositionRequestRes);
4270 break;
4271 case 96: /*Inter System Position Request Forward*/
4272 offset = dissect_ansi_map_InterSystemPositionRequestForwardRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_interSystemPositionRequestRes);
4273 break;
4274 case 98: /*Roamer Database Verification Request*/
4275 offset = dissect_ansi_map_RoamerDatabaseVerificationRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_roamerDatabaseVerificationRequestRes);
4276 break;
4277 case 99: /*Add Service*/
4278 offset = dissect_ansi_map_AddServiceRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_addServiceRes);
4279 break;
4280 case 100: /*Drop Service*/
4281 offset = dissect_ansi_map_DropServiceRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_dropServiceRes);
4282 break;
4283 /*End N.S0029 */
4284 /* X.S0002-0 v1.0 */
4285 /* LCSParameterRequest */
4286 case 102:
4287 offset = dissect_ansi_map_LCSParameterRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_lcsParameterRequestRes);
4288 break;
4289 /* CheckMEID X.S0008-0 v1.0*/
4290 case 104:
4291 offset = dissect_ansi_map_CheckMEIDRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_checkMEIDRes);
4292 break;
4293 /* PositionEventNotification *
4294 case 106:
4295 offset = dissect_ansi_map_PositionEventNotification(TRUE, tvb, offset, actx, tree, hf_ansi_map_positionEventNotificationRes);
4296 break;
4298 case 107:
4299 /* StatusRequest X.S0008-0 v1.0*/
4300 offset = dissect_ansi_map_StatusRequestRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_statusRequestRes);
4301 break;
4302 case 111:
4303 /* InterSystemSMSDeliveryPointToPointRes X.S0004-540-E v2.0 */
4304 offset = dissect_ansi_map_InterSystemSMSDeliveryPointToPointRes(TRUE, tvb, offset, actx, tree, hf_ansi_map_interSystemSMSDeliveryPointToPointRes);
4305 break;
4306 case 112:
4307 /* QualificationRequest2Res 112 X.S0004-540-E v2.0*/
4308 offset = dissect_ansi_map_QualificationRequest2Res(TRUE, tvb, offset, actx, tree, hf_ansi_map_qualificationRequest2Res);
4309 break;
4310 default:
4311 proto_tree_add_text(tree, tvb, offset, -1, "Unknown invokeData blob");
4312 opCodeKnown = FALSE;
4313 break;
4316 if (opCodeKnown)
4318 tap_p->message_type = OperationCode;
4319 tap_p->size = 0; /* should be number of octets in message */
4321 tap_queue_packet(ansi_map_tap, g_pinfo, tap_p);
4324 return offset;
4327 static int
4328 find_saved_invokedata(asn1_ctx_t *actx, struct ansi_tcap_private_t *p_private_tcap){
4329 struct ansi_map_invokedata_t *ansi_map_saved_invokedata;
4330 address* src = &(actx->pinfo->src);
4331 address* dst = &(actx->pinfo->dst);
4332 guint8 *src_str;
4333 guint8 *dst_str;
4334 char *buf;
4336 buf=(char *)wmem_alloc(wmem_packet_scope(), 1024);
4338 /* Data from the TCAP dissector */
4339 /* The hash string needs to contain src and dest to distiguish differnt flows */
4340 src_str = ep_address_to_str(src);
4341 dst_str = ep_address_to_str(dst);
4342 /* Reverse order to invoke */
4343 switch(ansi_map_response_matching_type){
4344 case ANSI_MAP_TID_ONLY:
4345 g_snprintf(buf,1024,"%s",p_private_tcap->TransactionID_str);
4346 break;
4347 case 1:
4348 g_snprintf(buf,1024,"%s%s",p_private_tcap->TransactionID_str,dst_str);
4349 break;
4350 default:
4351 g_snprintf(buf,1024,"%s%s%s",p_private_tcap->TransactionID_str,dst_str,src_str);
4352 break;
4355 /*g_warning("Find Hash string %s pkt: %u",buf,actx->pinfo->fd->num);*/
4356 ansi_map_saved_invokedata = (struct ansi_map_invokedata_t *)g_hash_table_lookup(TransactionId_table, buf);
4357 if(ansi_map_saved_invokedata){
4358 OperationCode = ansi_map_saved_invokedata->opcode & 0xff;
4359 ServiceIndicator = ansi_map_saved_invokedata->ServiceIndicator;
4360 }else{
4361 OperationCode = OperationCode & 0x00ff;
4364 return OperationCode;
4367 static int
4368 dissect_ansi_map(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
4370 proto_item *ansi_map_item;
4371 proto_tree *ansi_map_tree = NULL;
4372 struct ansi_tcap_private_t *p_private_tcap = (struct ansi_tcap_private_t *)data;
4373 asn1_ctx_t asn1_ctx;
4374 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
4376 SMS_BearerData_tvb = NULL;
4377 ansi_map_sms_tele_id = -1;
4378 g_pinfo = pinfo;
4379 g_tree = tree;
4381 * Make entry in the Protocol column on summary display
4383 col_set_str(pinfo->cinfo, COL_PROTOCOL, "ANSI MAP");
4385 /* Data from the TCAP dissector */
4386 if (data == NULL){
4387 proto_tree_add_text(tree, tvb, 0, -1, "Dissector ERROR this dissector relies on dissector data");
4388 return 0;
4392 * create the ansi_map protocol tree
4394 ansi_map_item = proto_tree_add_item(tree, proto_ansi_map, tvb, 0, -1, ENC_NA);
4395 ansi_map_tree = proto_item_add_subtree(ansi_map_item, ett_ansi_map);
4396 ansi_map_is_invoke = FALSE;
4397 is683_ota = FALSE;
4398 is801_pld = FALSE;
4399 ServiceIndicator = 0;
4401 switch(p_private_tcap->d.pdu){
4403 1 : invoke,
4404 2 : returnResult,
4405 3 : returnError,
4406 4 : reject
4408 case 1:
4409 OperationCode = p_private_tcap->d.OperationCode_private & 0x00ff;
4410 ansi_map_is_invoke = TRUE;
4411 col_add_fstr(pinfo->cinfo, COL_INFO,"%s Invoke ", val_to_str_ext(OperationCode, &ansi_map_opr_code_strings_ext, "Unknown ANSI-MAP PDU (%u)"));
4412 proto_item_append_text(p_private_tcap->d.OperationCode_item," %s",val_to_str_ext(OperationCode, &ansi_map_opr_code_strings_ext, "Unknown ANSI-MAP PDU (%u)"));
4413 dissect_invokeData(ansi_map_tree, tvb, 0, &asn1_ctx);
4414 update_saved_invokedata(pinfo, p_private_tcap);
4415 break;
4416 case 2:
4417 OperationCode = find_saved_invokedata(&asn1_ctx, p_private_tcap);
4418 col_add_fstr(pinfo->cinfo, COL_INFO,"%s ReturnResult ", val_to_str_ext(OperationCode, &ansi_map_opr_code_strings_ext, "Unknown ANSI-MAP PDU (%u)"));
4419 proto_item_append_text(p_private_tcap->d.OperationCode_item," %s",val_to_str_ext(OperationCode, &ansi_map_opr_code_strings_ext, "Unknown ANSI-MAP PDU (%u)"));
4420 dissect_returnData(ansi_map_tree, tvb, 0, &asn1_ctx);
4421 break;
4422 case 3:
4423 col_add_fstr(pinfo->cinfo, COL_INFO,"%s ReturnError ", val_to_str_ext(OperationCode, &ansi_map_opr_code_strings_ext, "Unknown ANSI-MAP PDU (%u)"));
4424 break;
4425 case 4:
4426 col_add_fstr(pinfo->cinfo, COL_INFO,"%s Reject ", val_to_str_ext(OperationCode, &ansi_map_opr_code_strings_ext, "Unknown ANSI-MAP PDU (%u)"));
4427 break;
4428 default:
4429 /* Must be Invoke ReturnResult ReturnError or Reject */
4430 DISSECTOR_ASSERT_NOT_REACHED();
4431 break;
4434 return tvb_length(tvb);
4437 static void range_delete_callback(guint32 ssn)
4439 if (ssn) {
4440 delete_ansi_tcap_subdissector(ssn , ansi_map_handle);
4444 static void range_add_callback(guint32 ssn)
4446 if (ssn) {
4447 add_ansi_tcap_subdissector(ssn , ansi_map_handle);
4451 void
4452 proto_reg_handoff_ansi_map(void)
4454 static gboolean ansi_map_prefs_initialized = FALSE;
4455 static range_t *ssn_range;
4457 if(!ansi_map_prefs_initialized)
4459 ansi_map_prefs_initialized = TRUE;
4460 ansi_map_handle = find_dissector("ansi_map");
4462 else
4464 range_foreach(ssn_range, range_delete_callback);
4465 g_free(ssn_range);
4468 ssn_range = range_copy(global_ssn_range);
4470 range_foreach(ssn_range, range_add_callback);
4473 /*--- proto_register_ansi_map -------------------------------------------*/
4474 void proto_register_ansi_map(void) {
4476 module_t *ansi_map_module;
4478 /* List of fields */
4479 static hf_register_info hf[] = {
4481 { &hf_ansi_map_op_code_fam,
4482 { "Operation Code Family", "ansi_map.op_code_fam",
4483 FT_UINT8, BASE_DEC, NULL, 0,
4484 NULL, HFILL }},
4485 { &hf_ansi_map_reservedBitH,
4486 { "Reserved", "ansi_map.reserved_bitH",
4487 FT_BOOLEAN, 8, NULL,0x80,
4488 NULL, HFILL }},
4489 { &hf_ansi_map_reservedBitD,
4490 { "Reserved", "ansi_map.reserved_bitD",
4491 FT_BOOLEAN, 8, NULL,0x08,
4492 NULL, HFILL }},
4493 { &hf_ansi_map_reservedBitHG,
4494 { "Reserved", "ansi_map.reserved_bitHG",
4495 FT_UINT8, BASE_DEC, NULL, 0xc0,
4496 NULL, HFILL }},
4497 { &hf_ansi_map_reservedBitHGFE,
4498 { "Reserved", "ansi_map.reserved_bitHGFE",
4499 FT_UINT8, BASE_DEC, NULL, 0xf0,
4500 NULL, HFILL }},
4501 { &hf_ansi_map_reservedBitFED,
4502 { "Reserved", "ansi_map.reserved_bitFED",
4503 FT_UINT8, BASE_DEC, NULL, 0x38,
4504 NULL, HFILL }},
4505 { &hf_ansi_map_reservedBitED,
4506 { "Reserved", "ansi_map.reserved_bitED",
4507 FT_UINT8, BASE_DEC, NULL, 0x18,
4508 NULL, HFILL }},
4509 { &hf_ansi_map_op_code,
4510 { "Operation Code", "ansi_map.op_code",
4511 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &ansi_map_opr_code_strings_ext, 0x0,
4512 NULL, HFILL }},
4513 { &hf_ansi_map_type_of_digits,
4514 { "Type of Digits", "ansi_map.type_of_digits",
4515 FT_UINT8, BASE_DEC, VALS(ansi_map_type_of_digits_vals), 0x0,
4516 NULL, HFILL }},
4517 { &hf_ansi_map_na,
4518 { "Nature of Number", "ansi_map.na",
4519 FT_BOOLEAN, 8, TFS(&ansi_map_na_bool_val),0x01,
4520 NULL, HFILL }},
4521 { &hf_ansi_map_pi,
4522 { "Presentation Indication", "ansi_map.type_of_pi",
4523 FT_BOOLEAN, 8, TFS(&ansi_map_pi_bool_val),0x02,
4524 NULL, HFILL }},
4525 { &hf_ansi_map_navail,
4526 { "Number available indication", "ansi_map.navail",
4527 FT_BOOLEAN, 8, TFS(&ansi_map_navail_bool_val),0x04,
4528 NULL, HFILL }},
4529 { &hf_ansi_map_si,
4530 { "Screening indication", "ansi_map.si",
4531 FT_UINT8, BASE_DEC, VALS(ansi_map_si_vals), 0x30,
4532 NULL, HFILL }},
4533 { &hf_ansi_map_digits_enc,
4534 { "Encoding", "ansi_map.enc",
4535 FT_UINT8, BASE_DEC, VALS(ansi_map_digits_enc_vals), 0x0f,
4536 NULL, HFILL }},
4537 { &hf_ansi_map_np,
4538 { "Numbering Plan", "ansi_map.np",
4539 FT_UINT8, BASE_DEC, VALS(ansi_map_np_vals), 0xf0,
4540 NULL, HFILL }},
4541 { &hf_ansi_map_nr_digits,
4542 { "Number of Digits", "ansi_map.nr_digits",
4543 FT_UINT8, BASE_DEC, NULL, 0x0,
4544 NULL, HFILL }},
4545 { &hf_ansi_map_bcd_digits,
4546 { "BCD digits", "ansi_map.bcd_digits",
4547 FT_STRING, BASE_NONE, NULL, 0,
4548 NULL, HFILL }},
4549 { &hf_ansi_map_ia5_digits,
4550 { "IA5 digits", "ansi_map.ia5_digits",
4551 FT_STRING, BASE_NONE, NULL, 0,
4552 NULL, HFILL }},
4553 { &hf_ansi_map_subaddr_type,
4554 { "Type of Subaddress", "ansi_map.subaddr_type",
4555 FT_UINT8, BASE_DEC, VALS(ansi_map_sub_addr_type_vals), 0x70,
4556 NULL, HFILL }},
4557 { &hf_ansi_map_subaddr_odd_even,
4558 { "Odd/Even Indicator", "ansi_map.subaddr_odd_even",
4559 FT_BOOLEAN, 8, TFS(&ansi_map_navail_bool_val),0x08,
4560 NULL, HFILL }},
4562 { &hf_ansi_alertcode_cadence,
4563 { "Cadence", "ansi_map.alertcode.cadence",
4564 FT_UINT8, BASE_DEC, VALS(ansi_map_AlertCode_Cadence_vals), 0x3f,
4565 NULL, HFILL }},
4566 { &hf_ansi_alertcode_pitch,
4567 { "Pitch", "ansi_map.alertcode.pitch",
4568 FT_UINT8, BASE_DEC, VALS(ansi_map_AlertCode_Pitch_vals), 0xc0,
4569 NULL, HFILL }},
4570 { &hf_ansi_alertcode_alertaction,
4571 { "Alert Action", "ansi_map.alertcode.alertaction",
4572 FT_UINT8, BASE_DEC, VALS(ansi_map_AlertCode_Alert_Action_vals), 0x07,
4573 NULL, HFILL }},
4574 { &hf_ansi_map_announcementcode_tone,
4575 { "Tone", "ansi_map.announcementcode.tone",
4576 FT_UINT8, BASE_DEC, VALS(ansi_map_AnnouncementCode_tone_vals), 0x0,
4577 NULL, HFILL }},
4578 { &hf_ansi_map_announcementcode_class,
4579 { "Tone", "ansi_map.announcementcode.class",
4580 FT_UINT8, BASE_DEC, VALS(ansi_map_AnnouncementCode_class_vals), 0xf,
4581 NULL, HFILL }},
4582 { &hf_ansi_map_announcementcode_std_ann,
4583 { "Standard Announcement", "ansi_map.announcementcode.std_ann",
4584 FT_UINT8, BASE_DEC, VALS(ansi_map_AnnouncementCode_std_ann_vals), 0x0,
4585 NULL, HFILL }},
4586 { &hf_ansi_map_announcementcode_cust_ann,
4587 { "Custom Announcement", "ansi_map.announcementcode.cust_ann",
4588 FT_UINT8, BASE_DEC, NULL, 0x0,
4589 NULL, HFILL }},
4590 { &hf_ansi_map_authorizationperiod_period,
4591 { "Period", "ansi_map.authorizationperiod.period",
4592 FT_UINT8, BASE_DEC, VALS(ansi_map_authorizationperiod_period_vals), 0x0,
4593 NULL, HFILL }},
4594 { &hf_ansi_map_value,
4595 { "Value", "ansi_map.value",
4596 FT_UINT8, BASE_DEC, NULL, 0x0,
4597 NULL, HFILL }},
4598 { &hf_ansi_map_msc_type,
4599 { "Type", "ansi_map.extendedmscid.type",
4600 FT_UINT8, BASE_DEC, VALS(ansi_map_msc_type_vals), 0x0,
4601 NULL, HFILL }},
4602 { &hf_ansi_map_handoffstate_pi,
4603 { "Party Involved (PI)", "ansi_map.handoffstate.pi",
4604 FT_BOOLEAN, 8, TFS(&ansi_map_HandoffState_pi_bool_val),0x01,
4605 NULL, HFILL }},
4606 { &hf_ansi_map_tgn,
4607 { "Trunk Group Number (G)", "ansi_map.tgn",
4608 FT_UINT8, BASE_DEC, NULL,0x0,
4609 NULL, HFILL }},
4610 { &hf_ansi_map_tmn,
4611 { "Trunk Member Number (M)", "ansi_map.tmn",
4612 FT_UINT8, BASE_DEC, NULL,0x0,
4613 NULL, HFILL }},
4614 { &hf_ansi_map_messagewaitingnotificationcount_tom,
4615 { "Type of messages", "ansi_map.messagewaitingnotificationcount.tom",
4616 FT_UINT8, BASE_DEC, VALS(ansi_map_MessageWaitingNotificationCount_type_vals), 0x0,
4617 NULL, HFILL }},
4618 { &hf_ansi_map_messagewaitingnotificationcount_no_mw,
4619 { "Number of Messages Waiting", "ansi_map.messagewaitingnotificationcount.nomw",
4620 FT_UINT8, BASE_DEC, NULL,0x0,
4621 NULL, HFILL }},
4622 { &hf_ansi_map_messagewaitingnotificationtype_mwi,
4623 { "Message Waiting Indication (MWI)", "ansi_map.messagewaitingnotificationcount.mwi",
4624 FT_UINT8, BASE_DEC, VALS(ansi_map_MessageWaitingNotificationType_mwi_vals), 0x0,
4625 NULL, HFILL }},
4626 { &hf_ansi_map_messagewaitingnotificationtype_apt,
4627 { "Alert Pip Tone (APT)", "ansi_map.messagewaitingnotificationtype.apt",
4628 FT_BOOLEAN, 8, TFS(&ansi_map_HandoffState_pi_bool_val),0x02,
4629 NULL, HFILL }},
4630 { &hf_ansi_map_messagewaitingnotificationtype_pt,
4631 { "Pip Tone (PT)", "ansi_map.messagewaitingnotificationtype.pt",
4632 FT_UINT8, BASE_DEC, VALS(ansi_map_MessageWaitingNotificationType_mwi_vals), 0xc0,
4633 NULL, HFILL }},
4635 { &hf_ansi_map_trans_cap_prof,
4636 { "Profile (PROF)", "ansi_map.trans_cap_prof",
4637 FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_prof_bool_val),0x01,
4638 NULL, HFILL }},
4639 { &hf_ansi_map_trans_cap_busy,
4640 { "Busy Detection (BUSY)", "ansi_map.trans_cap_busy",
4641 FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_busy_bool_val),0x02,
4642 NULL, HFILL }},
4643 { &hf_ansi_map_trans_cap_ann,
4644 { "Announcements (ANN)", "ansi_map.trans_cap_ann",
4645 FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_ann_bool_val),0x04,
4646 NULL, HFILL }},
4647 { &hf_ansi_map_trans_cap_rui,
4648 { "Remote User Interaction (RUI)", "ansi_map.trans_cap_rui",
4649 FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_rui_bool_val),0x08,
4650 NULL, HFILL }},
4651 { &hf_ansi_map_trans_cap_spini,
4652 { "Subscriber PIN Intercept (SPINI)", "ansi_map.trans_cap_spini",
4653 FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_spini_bool_val),0x10,
4654 NULL, HFILL }},
4655 { &hf_ansi_map_trans_cap_uzci,
4656 { "UZ Capability Indicator (UZCI)", "ansi_map.trans_cap_uzci",
4657 FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_uzci_bool_val),0x20,
4658 NULL, HFILL }},
4659 { &hf_ansi_map_trans_cap_ndss,
4660 { "NDSS Capability (NDSS)", "ansi_map.trans_cap_ndss",
4661 FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_ndss_bool_val),0x40,
4662 NULL, HFILL }},
4663 { &hf_ansi_map_trans_cap_nami,
4664 { "NAME Capability Indicator (NAMI)", "ansi_map.trans_cap_nami",
4665 FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_nami_bool_val),0x80,
4666 NULL, HFILL }},
4667 { &hf_ansi_trans_cap_multerm,
4668 { "Multiple Terminations", "ansi_map.trans_cap_multerm",
4669 FT_UINT8, BASE_DEC, VALS(ansi_map_trans_cap_multerm_vals), 0x0f,
4670 NULL, HFILL }},
4671 { &hf_ansi_map_terminationtriggers_busy,
4672 { "Busy", "ansi_map.terminationtriggers.busy",
4673 FT_UINT8, BASE_DEC, VALS(ansi_map_terminationtriggers_busy_vals), 0x03,
4674 NULL, HFILL }},
4675 { &hf_ansi_map_terminationtriggers_rf,
4676 { "Routing Failure (RF)", "ansi_map.terminationtriggers.rf",
4677 FT_UINT8, BASE_DEC, VALS(ansi_map_terminationtriggers_rf_vals), 0x0c,
4678 NULL, HFILL }},
4679 { &hf_ansi_map_terminationtriggers_npr,
4680 { "No Page Response (NPR)", "ansi_map.terminationtriggers.npr",
4681 FT_UINT8, BASE_DEC, VALS(ansi_map_terminationtriggers_npr_vals), 0x30,
4682 NULL, HFILL }},
4683 { &hf_ansi_map_terminationtriggers_na,
4684 { "No Answer (NA)", "ansi_map.terminationtriggers.na",
4685 FT_UINT8, BASE_DEC, VALS(ansi_map_terminationtriggers_na_vals), 0xc0,
4686 NULL, HFILL }},
4687 { &hf_ansi_map_terminationtriggers_nr,
4688 { "None Reachable (NR)", "ansi_map.terminationtriggers.nr",
4689 FT_UINT8, BASE_DEC, VALS(ansi_map_terminationtriggers_nr_vals), 0x01,
4690 NULL, HFILL }},
4691 { &hf_ansi_trans_cap_tl,
4692 { "TerminationList (TL)", "ansi_map.trans_cap_tl",
4693 FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_tl_bool_val),0x10,
4694 NULL, HFILL }},
4695 { &hf_ansi_map_cdmaserviceoption,
4696 { "CDMAServiceOption", "ansi_map.cdmaserviceoption",
4697 FT_UINT16, BASE_RANGE_STRING | BASE_DEC, RVALS(cdmaserviceoption_vals), 0x0,
4698 NULL, HFILL }},
4699 { &hf_ansi_trans_cap_waddr,
4700 { "WIN Addressing (WADDR)", "ansi_map.trans_cap_waddr",
4701 FT_BOOLEAN, 8, TFS(&ansi_map_trans_cap_waddr_bool_val),0x20,
4702 NULL, HFILL }},
4704 { &hf_ansi_map_MarketID,
4705 { "MarketID", "ansi_map.marketid",
4706 FT_UINT16, BASE_DEC, NULL, 0,
4707 NULL, HFILL }},
4708 { &hf_ansi_map_swno,
4709 { "Switch Number (SWNO)", "ansi_map.swno",
4710 FT_UINT8, BASE_DEC, NULL, 0,
4711 NULL, HFILL }},
4712 { &hf_ansi_map_idno,
4713 { "ID Number", "ansi_map.idno",
4714 FT_UINT32, BASE_DEC, NULL, 0,
4715 NULL, HFILL }},
4716 { &hf_ansi_map_segcount,
4717 { "Segment Counter", "ansi_map.segcount",
4718 FT_UINT8, BASE_DEC, NULL, 0,
4719 NULL, HFILL }},
4720 { &hf_ansi_map_sms_originationrestrictions_direct,
4721 { "DIRECT", "ansi_map.originationrestrictions.direct",
4722 FT_BOOLEAN, 8, TFS(&ansi_map_SMS_OriginationRestrictions_direct_bool_val),0x04,
4723 NULL, HFILL }},
4724 { &hf_ansi_map_sms_originationrestrictions_default,
4725 { "DEFAULT", "ansi_map.originationrestrictions.default",
4726 FT_UINT8, BASE_DEC, VALS(ansi_map_SMS_OriginationRestrictions_default_vals), 0x03,
4727 NULL, HFILL }},
4728 { &hf_ansi_map_sms_originationrestrictions_fmc,
4729 { "Force Message Center (FMC)", "ansi_map.originationrestrictions.fmc",
4730 FT_BOOLEAN, 8, TFS(&ansi_map_SMS_OriginationRestrictions_fmc_bool_val),0x08,
4731 NULL, HFILL }},
4733 { &hf_ansi_map_systemcapabilities_auth,
4734 { "Authentication Parameters Requested (AUTH)", "ansi_map.systemcapabilities.auth",
4735 FT_BOOLEAN, 8, TFS(&ansi_map_systemcapabilities_auth_bool_val),0x01,
4736 NULL, HFILL }},
4737 { &hf_ansi_map_systemcapabilities_se,
4738 { "Signaling Message Encryption Capable (SE )", "ansi_map.systemcapabilities.se",
4739 FT_BOOLEAN, 8, TFS(&ansi_map_systemcapabilities_se_bool_val),0x02,
4740 NULL, HFILL }},
4741 { &hf_ansi_map_systemcapabilities_vp,
4742 { "Voice Privacy Capable (VP )", "ansi_map.systemcapabilities.vp",
4743 FT_BOOLEAN, 8, TFS(&ansi_map_systemcapabilities_vp_bool_val),0x04,
4744 NULL, HFILL }},
4745 { &hf_ansi_map_systemcapabilities_cave,
4746 { "CAVE Algorithm Capable (CAVE)", "ansi_map.systemcapabilities.cave",
4747 FT_BOOLEAN, 8, TFS(&ansi_map_systemcapabilities_cave_bool_val),0x08,
4748 NULL, HFILL }},
4749 { &hf_ansi_map_systemcapabilities_ssd,
4750 { "Shared SSD (SSD)", "ansi_map.systemcapabilities.ssd",
4751 FT_BOOLEAN, 8, TFS(&ansi_map_systemcapabilities_ssd_bool_val),0x10,
4752 NULL, HFILL }},
4753 { &hf_ansi_map_systemcapabilities_dp,
4754 { "Data Privacy (DP)", "ansi_map.systemcapabilities.dp",
4755 FT_BOOLEAN, 8, TFS(&ansi_map_systemcapabilities_dp_bool_val),0x20,
4756 NULL, HFILL }},
4758 { &hf_ansi_map_mslocation_lat,
4759 { "Latitude in tenths of a second", "ansi_map.mslocation.lat",
4760 FT_UINT8, BASE_DEC, NULL, 0,
4761 NULL, HFILL }},
4762 { &hf_ansi_map_mslocation_long,
4763 { "Longitude in tenths of a second", "ansi_map.mslocation.long",
4764 FT_UINT8, BASE_DEC, NULL, 0,
4765 "Switch Number (SWNO)", HFILL }},
4766 { &hf_ansi_map_mslocation_res,
4767 { "Resolution in units of 1 foot", "ansi_map.mslocation.res",
4768 FT_UINT8, BASE_DEC, NULL, 0,
4769 NULL, HFILL }},
4770 { &hf_ansi_map_nampscallmode_namps,
4771 { "Call Mode", "ansi_map.nampscallmode.namps",
4772 FT_BOOLEAN, 8, TFS(&ansi_map_CallMode_namps_bool_val),0x01,
4773 NULL, HFILL }},
4774 { &hf_ansi_map_nampscallmode_amps,
4775 { "Call Mode", "ansi_map.nampscallmode.amps",
4776 FT_BOOLEAN, 8, TFS(&ansi_map_CallMode_amps_bool_val),0x02,
4777 NULL, HFILL }},
4778 { &hf_ansi_map_nampschanneldata_navca,
4779 { "Narrow Analog Voice Channel Assignment (NAVCA)", "ansi_map.nampschanneldata.navca",
4780 FT_UINT8, BASE_DEC, VALS(ansi_map_NAMPSChannelData_navca_vals), 0x03,
4781 NULL, HFILL }},
4782 { &hf_ansi_map_nampschanneldata_CCIndicator,
4783 { "Color Code Indicator (CCIndicator)", "ansi_map.nampschanneldata.ccindicator",
4784 FT_UINT8, BASE_DEC, VALS(ansi_map_NAMPSChannelData_ccinidicator_vals), 0x1c,
4785 NULL, HFILL }},
4788 { &hf_ansi_map_callingfeaturesindicator_cfufa,
4789 { "Call Forwarding Unconditional FeatureActivity, CFU-FA", "ansi_map.callingfeaturesindicator.cfufa",
4790 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x03,
4791 NULL, HFILL }},
4792 { &hf_ansi_map_callingfeaturesindicator_cfbfa,
4793 { "Call Forwarding Busy FeatureActivity, CFB-FA", "ansi_map.callingfeaturesindicator.cfbafa",
4794 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x0c,
4795 NULL, HFILL }},
4796 { &hf_ansi_map_callingfeaturesindicator_cfnafa,
4797 { "Call Forwarding No Answer FeatureActivity, CFNA-FA", "ansi_map.callingfeaturesindicator.cfnafa",
4798 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x30,
4799 NULL, HFILL }},
4800 { &hf_ansi_map_callingfeaturesindicator_cwfa,
4801 { "Call Waiting: FeatureActivity, CW-FA", "ansi_map.callingfeaturesindicator.cwfa",
4802 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0xc0,
4803 NULL, HFILL }},
4805 { &hf_ansi_map_callingfeaturesindicator_3wcfa,
4806 { "Three-Way Calling FeatureActivity, 3WC-FA", "ansi_map.callingfeaturesindicator.3wcfa",
4807 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x03,
4808 NULL, HFILL }},
4810 { &hf_ansi_map_callingfeaturesindicator_pcwfa,
4811 { "Priority Call Waiting FeatureActivity PCW-FA", "ansi_map.callingfeaturesindicator.pcwfa",
4812 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x03,
4813 NULL, HFILL }},
4815 { &hf_ansi_map_callingfeaturesindicator_dpfa,
4816 { "Data Privacy Feature Activity DP-FA", "ansi_map.callingfeaturesindicator.dpfa",
4817 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x0c,
4818 NULL, HFILL }},
4819 { &hf_ansi_map_callingfeaturesindicator_ahfa,
4820 { "Answer Hold: FeatureActivity AH-FA", "ansi_map.callingfeaturesindicator.ahfa",
4821 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x30,
4822 NULL, HFILL }},
4823 { &hf_ansi_map_callingfeaturesindicator_uscfvmfa,
4824 { "USCF divert to voice mail: FeatureActivity USCFvm-FA", "ansi_map.callingfeaturesindicator.uscfvmfa",
4825 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0xc0,
4826 NULL, HFILL }},
4828 { &hf_ansi_map_callingfeaturesindicator_uscfmsfa,
4829 { "USCF divert to mobile station provided DN:FeatureActivity.USCFms-FA", "ansi_map.callingfeaturesindicator.uscfmsfa",
4830 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x03,
4831 NULL, HFILL }},
4832 { &hf_ansi_map_callingfeaturesindicator_uscfnrfa,
4833 { "USCF divert to network registered DN:FeatureActivity. USCFnr-FA", "ansi_map.callingfeaturesindicator.uscfnrfa",
4834 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x0c,
4835 NULL, HFILL }},
4836 { &hf_ansi_map_callingfeaturesindicator_cpdsfa,
4837 { "CDMA-Packet Data Service: FeatureActivity. CPDS-FA", "ansi_map.callingfeaturesindicator.cpdfa",
4838 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x30,
4839 NULL, HFILL }},
4840 { &hf_ansi_map_callingfeaturesindicator_ccsfa,
4841 { "CDMA-Concurrent Service:FeatureActivity. CCS-FA", "ansi_map.callingfeaturesindicator.ccsfa",
4842 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0xc0,
4843 NULL, HFILL }},
4845 { &hf_ansi_map_callingfeaturesindicator_epefa,
4846 { "TDMA Enhanced Privacy and Encryption:FeatureActivity.TDMA EPE-FA", "ansi_map.callingfeaturesindicator.epefa",
4847 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x03,
4848 NULL, HFILL }},
4851 { &hf_ansi_map_callingfeaturesindicator_cdfa,
4852 { "Call Delivery: FeatureActivity, CD-FA", "ansi_map.callingfeaturesindicator.cdfa",
4853 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x0c,
4854 NULL, HFILL }},
4855 { &hf_ansi_map_callingfeaturesindicator_vpfa,
4856 { "Voice Privacy FeatureActivity, VP-FA", "ansi_map.callingfeaturesindicator.vpfa",
4857 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x30,
4858 NULL, HFILL }},
4859 { &hf_ansi_map_callingfeaturesindicator_ctfa,
4860 { "Call Transfer: FeatureActivity, CT-FA", "ansi_map.callingfeaturesindicator.ctfa",
4861 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0xc0,
4862 NULL, HFILL }},
4864 { &hf_ansi_map_callingfeaturesindicator_cnip1fa,
4865 { "One number (network-provided only) Calling Number Identification Presentation: FeatureActivity CNIP1-FA", "ansi_map.callingfeaturesindicator.cnip1fa",
4866 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x03,
4867 NULL, HFILL }},
4868 { &hf_ansi_map_callingfeaturesindicator_cnip2fa,
4869 { "Two number (network-provided and user-provided) Calling Number Identification Presentation: FeatureActivity CNIP2-FA", "ansi_map.callingfeaturesindicator.cnip2fa",
4870 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x0c,
4871 NULL, HFILL }},
4872 { &hf_ansi_map_callingfeaturesindicator_cnirfa,
4873 { "Calling Number Identification Restriction: FeatureActivity CNIR-FA", "ansi_map.callingfeaturesindicator.cnirfa",
4874 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0x30,
4875 NULL, HFILL }},
4876 { &hf_ansi_map_callingfeaturesindicator_cniroverfa,
4877 { "Calling Number Identification Restriction Override FeatureActivity CNIROver-FA", "ansi_map.callingfeaturesindicator.cniroverfa",
4878 FT_UINT8, BASE_DEC, VALS(ansi_map_FeatureActivity_vals), 0xc0,
4879 NULL, HFILL }},
4881 { &hf_ansi_map_cdmacallmode_cdma,
4882 { "Call Mode", "ansi_map.cdmacallmode.cdma",
4883 FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cdma_bool_val),0x01,
4884 NULL, HFILL }},
4885 { &hf_ansi_map_cdmacallmode_amps,
4886 { "Call Mode", "ansi_map.cdmacallmode.amps",
4887 FT_BOOLEAN, 8, TFS(&ansi_map_CallMode_amps_bool_val),0x02,
4888 NULL, HFILL }},
4889 { &hf_ansi_map_cdmacallmode_namps,
4890 { "Call Mode", "ansi_map.cdmacallmode.namps",
4891 FT_BOOLEAN, 8, TFS(&ansi_map_CallMode_namps_bool_val),0x04,
4892 NULL, HFILL }},
4893 { &hf_ansi_map_cdmacallmode_cls1,
4894 { "Call Mode", "ansi_map.cdmacallmode.cls1",
4895 FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls1_bool_val),0x08,
4896 NULL, HFILL }},
4897 { &hf_ansi_map_cdmacallmode_cls2,
4898 { "Call Mode", "ansi_map.cdmacallmode.cls2",
4899 FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls2_bool_val),0x10,
4900 NULL, HFILL }},
4901 { &hf_ansi_map_cdmacallmode_cls3,
4902 { "Call Mode", "ansi_map.cdmacallmode.cls3",
4903 FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls3_bool_val),0x20,
4904 NULL, HFILL }},
4905 { &hf_ansi_map_cdmacallmode_cls4,
4906 { "Call Mode", "ansi_map.cdmacallmode.cls4",
4907 FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls4_bool_val),0x40,
4908 NULL, HFILL }},
4909 { &hf_ansi_map_cdmacallmode_cls5,
4910 { "Call Mode", "ansi_map.cdmacallmode.cls5",
4911 FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls5_bool_val),0x80,
4912 NULL, HFILL }},
4913 { &hf_ansi_map_cdmacallmode_cls6,
4914 { "Call Mode", "ansi_map.cdmacallmode.cls6",
4915 FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls6_bool_val),0x01,
4916 NULL, HFILL }},
4917 { &hf_ansi_map_cdmacallmode_cls7,
4918 { "Call Mode", "ansi_map.cdmacallmode.cls7",
4919 FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls7_bool_val),0x02,
4920 NULL, HFILL }},
4921 { &hf_ansi_map_cdmacallmode_cls8,
4922 { "Call Mode", "ansi_map.cdmacallmode.cls8",
4923 FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls8_bool_val),0x04,
4924 NULL, HFILL }},
4925 { &hf_ansi_map_cdmacallmode_cls9,
4926 { "Call Mode", "ansi_map.cdmacallmode.cls9",
4927 FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls9_bool_val),0x08,
4928 NULL, HFILL }},
4929 { &hf_ansi_map_cdmacallmode_cls10,
4930 { "Call Mode", "ansi_map.cdmacallmode.cls10",
4931 FT_BOOLEAN, 8, TFS(&ansi_map_CDMACallMode_cls10_bool_val),0x10,
4932 NULL, HFILL }},
4933 {&hf_ansi_map_cdmachanneldata_Frame_Offset,
4934 { "Frame Offset", "ansi_map.cdmachanneldata.frameoffset",
4935 FT_UINT8, BASE_DEC, NULL, 0x78,
4936 NULL, HFILL }},
4937 {&hf_ansi_map_cdmachanneldata_CDMA_ch_no,
4938 { "CDMA Channel Number", "ansi_map.cdmachanneldata.cdma_ch_no",
4939 FT_UINT16, BASE_DEC, NULL, 0x07FF,
4940 NULL, HFILL }},
4941 {&hf_ansi_map_cdmachanneldata_band_cls,
4942 { "Band Class", "ansi_map.cdmachanneldata.band_cls",
4943 FT_UINT8, BASE_DEC, VALS(ansi_map_cdmachanneldata_band_cls_vals), 0x7c,
4944 NULL, HFILL }},
4945 {&hf_ansi_map_cdmachanneldata_lc_mask_b6,
4946 { "Long Code Mask (byte 6) MSB", "ansi_map.cdmachanneldata.lc_mask_b6",
4947 FT_UINT8, BASE_HEX, NULL, 0x03,
4948 "Long Code Mask MSB (byte 6)", HFILL }},
4949 {&hf_ansi_map_cdmachanneldata_lc_mask_b5,
4950 { "Long Code Mask (byte 5)", "ansi_map.cdmachanneldata.lc_mask_b5",
4951 FT_UINT8, BASE_HEX, NULL, 0xff,
4952 NULL, HFILL }},
4953 {&hf_ansi_map_cdmachanneldata_lc_mask_b4,
4954 { "Long Code Mask (byte 4)", "ansi_map.cdmachanneldata.lc_mask_b4",
4955 FT_UINT8, BASE_HEX, NULL, 0xff,
4956 NULL, HFILL }},
4957 {&hf_ansi_map_cdmachanneldata_lc_mask_b3,
4958 { "Long Code Mask (byte 3)", "ansi_map.cdmachanneldata.lc_mask_b3",
4959 FT_UINT8, BASE_HEX, NULL, 0xff,
4960 NULL, HFILL }},
4961 {&hf_ansi_map_cdmachanneldata_lc_mask_b2,
4962 { "Long Code Mask (byte 2)", "ansi_map.cdmachanneldata.lc_mask_b2",
4963 FT_UINT8, BASE_HEX, NULL, 0xff,
4964 NULL, HFILL }},
4965 {&hf_ansi_map_cdmachanneldata_lc_mask_b1,
4966 { "Long Code Mask LSB(byte 1)", "ansi_map.cdmachanneldata.lc_mask_b1",
4967 FT_UINT8, BASE_HEX, NULL, 0xff,
4968 "Long Code Mask (byte 1)LSB", HFILL }},
4969 {&hf_ansi_map_cdmachanneldata_np_ext,
4970 { "NP EXT", "ansi_map.cdmachanneldata.np_ext",
4971 FT_BOOLEAN, 8, NULL,0x80,
4972 NULL, HFILL }},
4973 {&hf_ansi_map_cdmachanneldata_nominal_pwr,
4974 { "Nominal Power", "ansi_map.cdmachanneldata.nominal_pwr",
4975 FT_UINT8, BASE_DEC, NULL, 0x71,
4976 NULL, HFILL }},
4977 {&hf_ansi_map_cdmachanneldata_nr_preamble,
4978 { "Number Preamble", "ansi_map.cdmachanneldata.nr_preamble",
4979 FT_UINT8, BASE_DEC, NULL, 0x07,
4980 NULL, HFILL }},
4982 { &hf_ansi_map_cdmastationclassmark_pc,
4983 { "Power Class(PC)", "ansi_map.cdmastationclassmark.pc",
4984 FT_UINT8, BASE_DEC, VALS(ansi_map_CDMAStationClassMark_pc_vals), 0x03,
4985 NULL, HFILL }},
4987 { &hf_ansi_map_cdmastationclassmark_dtx,
4988 { "Analog Transmission: (DTX)", "ansi_map.cdmastationclassmark.dtx",
4989 FT_BOOLEAN, 8, TFS(&ansi_map_CDMAStationClassMark_dtx_bool_val),0x04,
4990 NULL, HFILL }},
4991 { &hf_ansi_map_cdmastationclassmark_smi,
4992 { "Slotted Mode Indicator: (SMI)", "ansi_map.cdmastationclassmark.smi",
4993 FT_BOOLEAN, 8, TFS(&ansi_map_CDMAStationClassMark_smi_bool_val),0x20,
4994 NULL, HFILL }},
4995 { &hf_ansi_map_cdmastationclassmark_dmi,
4996 { "Dual-mode Indicator(DMI)", "ansi_map.cdmastationclassmark.dmi",
4997 FT_BOOLEAN, 8, TFS(&ansi_map_CDMAStationClassMark_dmi_bool_val),0x40,
4998 NULL, HFILL }},
4999 { &hf_ansi_map_channeldata_vmac,
5000 { "Voice Mobile Attenuation Code (VMAC)", "ansi_map.channeldata.vmac",
5001 FT_UINT8, BASE_DEC, NULL, 0x07,
5002 NULL, HFILL }},
5003 { &hf_ansi_map_channeldata_dtx,
5004 { "Discontinuous Transmission Mode (DTX)", "ansi_map.channeldata.dtx",
5005 FT_UINT8, BASE_DEC, VALS(ansi_map_ChannelData_dtx_vals), 0x18,
5006 NULL, HFILL }},
5007 { &hf_ansi_map_channeldata_scc,
5008 { "SAT Color Code (SCC)", "ansi_map.channeldata.scc",
5009 FT_UINT8, BASE_DEC, NULL, 0xc0,
5010 NULL, HFILL }},
5011 { &hf_ansi_map_channeldata_chno,
5012 { "Channel Number (CHNO)", "ansi_map.channeldata.chno",
5013 FT_UINT16, BASE_DEC, NULL, 0x0,
5014 NULL, HFILL }},
5015 { &hf_ansi_map_ConfidentialityModes_vp,
5016 { "Voice Privacy (VP) Confidentiality Status", "ansi_map.confidentialitymodes.vp",
5017 FT_BOOLEAN, 8, TFS(&ansi_map_ConfidentialityModes_bool_val),0x01,
5018 NULL, HFILL }},
5019 { &hf_ansi_map_controlchanneldata_dcc,
5020 { "Digital Color Code (DCC)", "ansi_map.controlchanneldata.dcc",
5021 FT_UINT8, BASE_DEC, NULL, 0xc0,
5022 NULL, HFILL }},
5023 { &hf_ansi_map_controlchanneldata_cmac,
5024 { "Control Mobile Attenuation Code (CMAC)", "ansi_map.controlchanneldata.cmac",
5025 FT_UINT8, BASE_DEC, NULL, 0x07,
5026 NULL, HFILL }},
5027 { &hf_ansi_map_controlchanneldata_chno,
5028 { "Channel Number (CHNO)", "ansi_map.controlchanneldata.chno",
5029 FT_UINT16, BASE_DEC, NULL, 0x0,
5030 NULL, HFILL }},
5031 { &hf_ansi_map_controlchanneldata_sdcc1,
5032 { "Supplementary Digital Color Codes (SDCC1)", "ansi_map.controlchanneldata.ssdc1",
5033 FT_UINT8, BASE_DEC, NULL, 0x0c,
5034 NULL, HFILL }},
5035 { &hf_ansi_map_controlchanneldata_sdcc2,
5036 { "Supplementary Digital Color Codes (SDCC2)", "ansi_map.controlchanneldata.ssdc2",
5037 FT_UINT8, BASE_DEC, NULL, 0x03,
5038 NULL, HFILL }},
5039 { &hf_ansi_map_ConfidentialityModes_se,
5040 { "Signaling Message Encryption (SE) Confidentiality Status", "ansi_map.confidentialitymodes.se",
5041 FT_BOOLEAN, 8, TFS(&ansi_map_ConfidentialityModes_bool_val),0x02,
5042 NULL, HFILL }},
5043 { &hf_ansi_map_ConfidentialityModes_dp,
5044 { "DataPrivacy (DP) Confidentiality Status", "ansi_map.confidentialitymodes.dp",
5045 FT_BOOLEAN, 8, TFS(&ansi_map_ConfidentialityModes_bool_val),0x04,
5046 NULL, HFILL }},
5048 { &hf_ansi_map_deniedauthorizationperiod_period,
5049 { "Period", "ansi_map.deniedauthorizationperiod.period",
5050 FT_UINT8, BASE_DEC, VALS(ansi_map_deniedauthorizationperiod_period_vals), 0x0,
5051 NULL, HFILL }},
5054 { &hf_ansi_map_originationtriggers_all,
5055 { "All Origination (All)", "ansi_map.originationtriggers.all",
5056 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_all_bool_val),0x01,
5057 NULL, HFILL }},
5058 { &hf_ansi_map_originationtriggers_local,
5059 { "Local", "ansi_map.originationtriggers.local",
5060 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_local_bool_val),0x02,
5061 NULL, HFILL }},
5062 { &hf_ansi_map_originationtriggers_ilata,
5063 { "Intra-LATA Toll (ILATA)", "ansi_map.originationtriggers.ilata",
5064 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_ilata_bool_val),0x04,
5065 NULL, HFILL }},
5066 { &hf_ansi_map_originationtriggers_olata,
5067 { "Inter-LATA Toll (OLATA)", "ansi_map.originationtriggers.olata",
5068 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_olata_bool_val),0x08,
5069 NULL, HFILL }},
5070 { &hf_ansi_map_originationtriggers_int,
5071 { "International (Int'l )", "ansi_map.originationtriggers.int",
5072 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_int_bool_val),0x10,
5073 NULL, HFILL }},
5074 { &hf_ansi_map_originationtriggers_wz,
5075 { "World Zone (WZ)", "ansi_map.originationtriggers.wz",
5076 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_wz_bool_val),0x20,
5077 NULL, HFILL }},
5078 { &hf_ansi_map_originationtriggers_unrec,
5079 { "Unrecognized Number (Unrec)", "ansi_map.originationtriggers.unrec",
5080 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_unrec_bool_val),0x40,
5081 NULL, HFILL }},
5082 { &hf_ansi_map_originationtriggers_rvtc,
5083 { "Revertive Call (RvtC)", "ansi_map.originationtriggers.rvtc",
5084 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_rvtc_bool_val),0x80,
5085 NULL, HFILL }},
5086 { &hf_ansi_map_originationtriggers_star,
5087 { "Star", "ansi_map.originationtriggers.star",
5088 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_star_bool_val),0x01,
5089 NULL, HFILL }},
5090 { &hf_ansi_map_originationtriggers_ds,
5091 { "Double Star (DS)", "ansi_map.originationtriggers.ds",
5092 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_ds_bool_val),0x02,
5093 NULL, HFILL }},
5094 { &hf_ansi_map_originationtriggers_pound,
5095 { "Pound", "ansi_map.originationtriggers.pound",
5096 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_pound_bool_val),0x04,
5097 NULL, HFILL }},
5098 { &hf_ansi_map_originationtriggers_dp,
5099 { "Double Pound (DP)", "ansi_map.originationtriggers.dp",
5100 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_dp_bool_val),0x08,
5101 NULL, HFILL }},
5102 { &hf_ansi_map_originationtriggers_pa,
5103 { "Prior Agreement (PA)", "ansi_map.originationtriggers.pa",
5104 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_pa_bool_val),0x10,
5105 NULL, HFILL }},
5106 { &hf_ansi_map_originationtriggers_nodig,
5107 { "No digits", "ansi_map.originationtriggers.nodig",
5108 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_nodig_bool_val),0x01,
5109 NULL, HFILL }},
5110 { &hf_ansi_map_originationtriggers_onedig,
5111 { "1 digit", "ansi_map.originationtriggers.onedig",
5112 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_onedig_bool_val),0x02,
5113 NULL, HFILL }},
5114 { &hf_ansi_map_originationtriggers_twodig,
5115 { "2 digits", "ansi_map.originationtriggers.twodig",
5116 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_twodig_bool_val),0x04,
5117 NULL, HFILL }},
5118 { &hf_ansi_map_originationtriggers_threedig,
5119 { "3 digits", "ansi_map.originationtriggers.threedig",
5120 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_threedig_bool_val),0x08,
5121 NULL, HFILL }},
5122 { &hf_ansi_map_originationtriggers_fourdig,
5123 { "4 digits", "ansi_map.originationtriggers.fourdig",
5124 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_fourdig_bool_val),0x10,
5125 NULL, HFILL }},
5126 { &hf_ansi_map_originationtriggers_fivedig,
5127 { "5 digits", "ansi_map.originationtriggers.fivedig",
5128 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_fivedig_bool_val),0x20,
5129 NULL, HFILL }},
5130 { &hf_ansi_map_originationtriggers_sixdig,
5131 { "6 digits", "ansi_map.originationtriggers.sixdig",
5132 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_sixdig_bool_val),0x40,
5133 NULL, HFILL }},
5134 { &hf_ansi_map_originationtriggers_sevendig,
5135 { "7 digits", "ansi_map.originationtriggers.sevendig",
5136 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_sevendig_bool_val),0x80,
5137 NULL, HFILL }},
5138 { &hf_ansi_map_originationtriggers_eightdig,
5139 { "8 digits", "ansi_map.originationtriggers.eight",
5140 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_eightdig_bool_val),0x01,
5141 NULL, HFILL }},
5142 { &hf_ansi_map_originationtriggers_ninedig,
5143 { "9 digits", "ansi_map.originationtriggers.nine",
5144 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_ninedig_bool_val),0x02,
5145 NULL, HFILL }},
5146 { &hf_ansi_map_originationtriggers_tendig,
5147 { "10 digits", "ansi_map.originationtriggers.ten",
5148 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_tendig_bool_val),0x04,
5149 NULL, HFILL }},
5150 { &hf_ansi_map_originationtriggers_elevendig,
5151 { "11 digits", "ansi_map.originationtriggers.eleven",
5152 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_elevendig_bool_val),0x08,
5153 NULL, HFILL }},
5154 { &hf_ansi_map_originationtriggers_twelvedig,
5155 { "12 digits", "ansi_map.originationtriggers.twelve",
5156 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_twelvedig_bool_val),0x10,
5157 NULL, HFILL }},
5158 { &hf_ansi_map_originationtriggers_thirteendig,
5159 { "13 digits", "ansi_map.originationtriggers.thirteen",
5160 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_thirteendig_bool_val),0x20,
5161 NULL, HFILL }},
5162 { &hf_ansi_map_originationtriggers_fourteendig,
5163 { "14 digits", "ansi_map.originationtriggers.fourteen",
5164 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_fourteendig_bool_val),0x40,
5165 NULL, HFILL }},
5166 { &hf_ansi_map_originationtriggers_fifteendig,
5167 { "15 digits", "ansi_map.originationtriggers.fifteen",
5168 FT_BOOLEAN, 8, TFS(&ansi_map_originationtriggers_fifteendig_bool_val),0x80,
5169 NULL, HFILL }},
5171 { &hf_ansi_map_triggercapability_init,
5172 { "Introducing Star/Pound (INIT)", "ansi_map.triggercapability.init",
5173 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x01,
5174 NULL, HFILL }},
5175 { &hf_ansi_map_triggercapability_kdigit,
5176 { "K-digit (K-digit)", "ansi_map.triggercapability.kdigit",
5177 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x02,
5178 NULL, HFILL }},
5179 { &hf_ansi_map_triggercapability_all,
5180 { "All_Calls (All)", "ansi_map.triggercapability.all",
5181 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x04,
5182 NULL, HFILL }},
5183 { &hf_ansi_map_triggercapability_rvtc,
5184 { "Revertive_Call (RvtC)", "ansi_map.triggercapability.rvtc",
5185 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x08,
5186 NULL, HFILL }},
5187 { &hf_ansi_map_triggercapability_oaa,
5188 { "Origination_Attempt_Authorized (OAA)", "ansi_map.triggercapability.oaa",
5189 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x10,
5190 NULL, HFILL }},
5191 { &hf_ansi_map_triggercapability_oans,
5192 { "O_Answer (OANS)", "ansi_map.triggercapability.oans",
5193 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x20,
5194 NULL, HFILL }},
5195 { &hf_ansi_map_triggercapability_odisc,
5196 { "O_Disconnect (ODISC)", "ansi_map.triggercapability.odisc",
5197 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x40,
5198 NULL, HFILL }},
5199 { &hf_ansi_map_triggercapability_ona,
5200 { "O_No_Answer (ONA)", "ansi_map.triggercapability.ona",
5201 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x80,
5202 NULL, HFILL }},
5204 { &hf_ansi_map_triggercapability_ct ,
5205 { "Call Types (CT)", "ansi_map.triggercapability.ct",
5206 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x01,
5207 NULL, HFILL }},
5208 { &hf_ansi_map_triggercapability_unrec,
5209 { "Unrecognized_Number (Unrec)", "ansi_map.triggercapability.unrec",
5210 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x02,
5211 NULL, HFILL }},
5212 { &hf_ansi_map_triggercapability_pa,
5213 { "Prior_Agreement (PA)", "ansi_map.triggercapability.pa",
5214 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x04,
5215 NULL, HFILL }},
5216 { &hf_ansi_map_triggercapability_at,
5217 { "Advanced_Termination (AT)", "ansi_map.triggercapability.at",
5218 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x08,
5219 NULL, HFILL }},
5220 { &hf_ansi_map_triggercapability_cgraa,
5221 { "Calling_Routing_Address_Available (CgRAA)", "ansi_map.triggercapability.cgraa",
5222 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x10,
5223 NULL, HFILL }},
5224 { &hf_ansi_map_triggercapability_it,
5225 { "Initial_Termination (IT)", "ansi_map.triggercapability.it",
5226 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x20,
5227 NULL, HFILL }},
5228 { &hf_ansi_map_triggercapability_cdraa,
5229 { "Called_Routing_Address_Available (CdRAA)", "ansi_map.triggercapability.cdraa",
5230 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x40,
5231 NULL, HFILL }},
5232 { &hf_ansi_map_triggercapability_obsy,
5233 { "O_Called_Party_Busy (OBSY)", "ansi_map.triggercapability.obsy",
5234 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x80,
5235 NULL, HFILL }},
5237 { &hf_ansi_map_triggercapability_tra ,
5238 { "Terminating_Resource_Available (TRA)", "ansi_map.triggercapability.tra",
5239 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x01,
5240 NULL, HFILL }},
5241 { &hf_ansi_map_triggercapability_tbusy,
5242 { "T_Busy (TBusy)", "ansi_map.triggercapability.tbusy",
5243 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x02,
5244 NULL, HFILL }},
5245 { &hf_ansi_map_triggercapability_tna,
5246 { "T_No_Answer (TNA)", "ansi_map.triggercapability.tna",
5247 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x04,
5248 NULL, HFILL }},
5249 { &hf_ansi_map_triggercapability_tans,
5250 { "T_Answer (TANS)", "ansi_map.triggercapability.tans",
5251 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x08,
5252 NULL, HFILL }},
5253 { &hf_ansi_map_triggercapability_tdisc,
5254 { "T_Disconnect (TDISC)", "ansi_map.triggercapability.tdisc",
5255 FT_BOOLEAN, 8, TFS(&ansi_map_triggercapability_bool_val),0x10,
5256 NULL, HFILL }},
5257 { &hf_ansi_map_winoperationscapability_conn,
5258 { "ConnectResource (CONN)", "ansi_map.winoperationscapability.conn",
5259 FT_BOOLEAN, 8, TFS(&ansi_map_winoperationscapability_conn_bool_val),0x01,
5260 NULL, HFILL }},
5261 { &hf_ansi_map_winoperationscapability_ccdir,
5262 { "CallControlDirective(CCDIR)", "ansi_map.winoperationscapability.ccdir",
5263 FT_BOOLEAN, 8, TFS(&ansi_map_winoperationscapability_ccdir_bool_val),0x02,
5264 NULL, HFILL }},
5265 { &hf_ansi_map_winoperationscapability_pos,
5266 { "PositionRequest (POS)", "ansi_map.winoperationscapability.pos",
5267 FT_BOOLEAN, 8, TFS(&ansi_map_winoperationscapability_pos_bool_val),0x04,
5268 NULL, HFILL }},
5269 { &hf_ansi_map_pacaindicator_pa,
5270 { "Permanent Activation (PA)", "ansi_map.pacaindicator_pa",
5271 FT_BOOLEAN, 8, TFS(&ansi_map_pacaindicator_pa_bool_val),0x01,
5272 NULL, HFILL }},
5273 { &hf_ansi_map_PACA_Level,
5274 { "PACA Level", "ansi_map.PACA_Level",
5275 FT_UINT8, BASE_DEC, VALS(ansi_map_PACA_Level_vals), 0x1e,
5276 NULL, HFILL }},
5278 #include "packet-ansi_map-hfarr.c"
5281 /* List of subtrees */
5282 static gint *ett[] = {
5283 &ett_ansi_map,
5284 &ett_mintype,
5285 &ett_digitstype,
5286 &ett_billingid,
5287 &ett_sms_bearer_data,
5288 &ett_sms_teleserviceIdentifier,
5289 &ett_extendedmscid,
5290 &ett_extendedsystemmytypecode,
5291 &ett_handoffstate,
5292 &ett_mscid,
5293 &ett_cdmachanneldata,
5294 &ett_cdmastationclassmark,
5295 &ett_channeldata,
5296 &ett_confidentialitymodes,
5297 &ett_controlchanneldata,
5298 &ett_CDMA2000HandoffInvokeIOSData,
5299 &ett_CDMA2000HandoffResponseIOSData,
5300 &ett_originationtriggers,
5301 &ett_pacaindicator,
5302 &ett_callingpartyname,
5303 &ett_triggercapability,
5304 &ett_winoperationscapability,
5305 &ett_win_trigger_list,
5306 &ett_controlnetworkid,
5307 &ett_transactioncapability,
5308 &ett_cdmaserviceoption,
5309 &ett_sms_originationrestrictions,
5310 &ett_systemcapabilities,
5311 #include "packet-ansi_map-ettarr.c"
5314 static const enum_val_t ansi_map_response_matching_type_values[] = {
5315 {"Only Transaction ID will be used in Invoke/response matching", "Transaction ID only", 0},
5316 {"Transaction ID and Source will be used in Invoke/response matching", "Transaction ID and Source", 1},
5317 {"Transaction ID Source and Destination will be used in Invoke/response matching", "Transaction ID Source and Destination", 2},
5318 {NULL, NULL, -1}
5321 /* Register protocol */
5322 proto_ansi_map = proto_register_protocol(PNAME, PSNAME, PFNAME);
5323 /* Register fields and subtrees */
5324 proto_register_field_array(proto_ansi_map, hf, array_length(hf));
5325 proto_register_subtree_array(ett, array_length(ett));
5327 new_register_dissector("ansi_map", dissect_ansi_map, proto_ansi_map);
5329 is637_tele_id_dissector_table =
5330 register_dissector_table("ansi_map.tele_id", "IS-637 Teleservice ID",
5331 FT_UINT8, BASE_DEC);
5333 is683_dissector_table =
5334 register_dissector_table("ansi_map.ota", "IS-683-A (OTA)",
5335 FT_UINT8, BASE_DEC);
5337 is801_dissector_table =
5338 register_dissector_table("ansi_map.pld", "IS-801 (PLD)",
5339 FT_UINT8, BASE_DEC);
5341 ansi_map_tap = register_tap("ansi_map");
5344 range_convert_str(&global_ssn_range, "5-14", MAX_SSN);
5346 ansi_map_module = prefs_register_protocol(proto_ansi_map, proto_reg_handoff_ansi_map);
5349 prefs_register_range_preference(ansi_map_module, "map.ssn", "ANSI MAP SSNs",
5350 "ANSI MAP SSNs to decode as ANSI MAP",
5351 &global_ssn_range, MAX_SSN);
5353 prefs_register_enum_preference(ansi_map_module, "transaction.matchtype",
5354 "Type of matching invoke/response",
5355 "Type of matching invoke/response, risk of missmatch if loose matching choosen",
5356 &ansi_map_response_matching_type, ansi_map_response_matching_type_values, FALSE);
5358 register_init_routine(&ansi_map_init_protocol);