2 * Routines for ANSI 41 Mobile Application Part (IS41 MAP) dissection
3 * Specications from 3GPP2 (www.3gpp2.org)
5 * Copyright 2003, Michael Lum <mlum [AT] telostech.com>
6 * In association with Telos Technology Inc.
8 * Should be very close to what ANSI/TIA/EIA-41-E will be as most known
9 * changes have been added: i.e. IS-778, IS-751, IS-725, IS-841, ...
13 * Cellular Radiotelecommunications Intersystem Operations
14 * 3GPP2 N.S0005-0 ANSI/TIA/EIA-41-D
16 * Network Support for MDN-Based Message Centers
17 * 3GPP2 N.S0024-0 v1.0 IS-841
19 * Enhanced International Calling
20 * 3GPP2 N.S0027 IS-875
23 * 3GPP2 N.S0030 J-STD-036-A
24 * XXX Teleservice_Priority not implemented, no parameter ID given!
26 * ANSI-41-D Miscellaneous Enhancements Revision 0
27 * 3GPP2 N.S0015 PN-3590 (ANSI-41-E)
29 * TIA/EIA-41-D Internationalization
30 * 3GPP2 N.S0016-0 v1.0
32 * Authentication Enhancements
33 * 3GPP2 N.S0014-0 v1.0 IS-778
35 * PCS Multi-band-Based on IS-41C
36 * 3GPP2 N.S0006-0 v1.0 TIA/EIA TSB-76
38 * Roamer Database Verification Revision B
39 * 3GPP2 N.S0025-B v1.0 IS-947 (aka IS-847 ?)
40 * XXX InvokingNEType not implemented, no parameter ID given!
43 * 3GPP2 N.S0010-0 v1.0 IS-735
45 * TIA/EIA-41-D Based Network Enhancements for CDMA Packet Data Service (C-PDS), Phase 1
46 * 3GPP2 N.S0029-0 v1.0 IS-880
49 * 3GPP2 N.S0011-0 v1.0 IS-725-A
51 * Circuit Mode Services
52 * 3GPP2 N.S0008-0 v1.0 IS-737
53 * XXX SecondInterMSCCircuitID not implemented, parameter ID conflicts with ISLP Information!
56 * 3GPP2 N.S0009-0 v1.0 IS-751
59 * 3GPP2 N.S0013-0 v1.0 IS-771
62 * 3GPP2 N.S0004-0 v1.0 IS-848
64 * TIA/EIA-41-D Pre-Paid Charging
65 * 3GPP2 N.S0018-0 v1.0 IS-826
67 * User Selective Call Forwarding
68 * 3GPP2 N.S0021-0 v1.0 IS-838
71 * 3GPP2 N.S0012-0 v1.0
74 * 3GPP2 N.S0022-0 v1.0 IS-837
76 * Automatic Code Gapping
77 * 3GPP2 N.S0023-0 v1.0
82 * $Id: packet-ansi_map.c,v 1.7 2003/10/30 19:38:57 guy Exp $
84 * Ethereal - Network traffic analyzer
85 * By Gerald Combs <gerald@ethereal.com>
86 * Copyright 1998 Gerald Combs
88 * This program is free software; you can redistribute it and/or
89 * modify it under the terms of the GNU General Public License
90 * as published by the Free Software Foundation; either version 2
91 * of the License, or (at your option) any later version.
93 * This program is distributed in the hope that it will be useful,
94 * but WITHOUT ANY WARRANTY; without even the implied warranty of
95 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
96 * GNU General Public License for more details.
98 * You should have received a copy of the GNU General Public License
99 * along with this program; if not, write to the Free Software
100 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
111 #ifdef HAVE_SYS_TYPES_H
112 # include <sys/types.h>
115 #ifdef HAVE_NETINET_IN_H
116 # include <netinet/in.h>
121 #include "epan/packet.h"
124 /* PROTOTYPES/FORWARDS */
126 static gboolean dissect_ansi_param(ASN1_SCK *asn1, proto_tree *tree);
128 /* ANSI PARAM STRINGS */
129 static const value_string ansi_param_1_strings[] = {
130 { 0x81, "Billing ID" },
131 { 0x82, "Serving Cell ID" },
132 { 0x83, "Target Cell ID" },
134 { 0x85, "Channel Data" },
135 { 0x86, "Inter MSC Circuit ID" },
136 { 0x87, "Inter Switch Count" },
137 { 0x88, "Mobile Identification Number" },
138 { 0x89, "Electronic Serial Number" },
139 { 0x8A, "Release Reason" },
140 { 0x8B, "Signal Quality" },
141 { 0x8C, "Station Class Mark" },
142 { 0x8D, "Authorization Denied" },
143 { 0x8E, "Authorization Period" },
144 { 0x8F, "Seizure Type" },
145 { 0x90, "Trunk Status" },
146 { 0x91, "Qualification Information Code" },
147 { 0x92, "Feature Result" },
148 { 0x93, "Redirection Reason" },
149 { 0x94, "Access Denied Reason" },
151 { 0x96, "System My Type Code" },
152 { 0x97, "Origination Indicator" },
153 { 0x98, "Termination Restriction Code" },
154 { 0x99, "Calling Features Indicator" },
155 { 0x9A, "Faulty Parameter" },
156 { 0x9B, "Usage Indicator" },
157 { 0x9C, "TDMA Channel Data" },
158 { 0x9D, "TDMA Call Mode" },
159 { 0x9E, "Handoff Reason" },
163 static const value_string ansi_param_2_strings[] = {
164 { 0x9F1F, "TDMA Burst Indicator" },
165 { 0x9F20, "PC_SSN" },
166 { 0x9F21, "Location Area ID" },
167 { 0x9F22, "System Access Type" },
168 { 0x9F23, "Authentication Response" },
169 { 0x9F24, "Authentication Response Base Station" },
170 { 0x9F25, "Authentication Response Unique Challenge" },
171 { 0x9F26, "Call History Count" },
172 { 0x9F27, "Confidentiality Modes" },
173 { 0x9F28, "Random Variable" },
174 { 0x9F29, "Random Variable Base Station" },
175 { 0x9F2A, "Random Variable SSD" },
176 { 0x9F2B, "Random Variable Unique Challenge" },
177 { 0x9F2C, "Report Type" },
178 { 0x9F2D, "Signaling Message Encryption Key" },
179 { 0x9F2E, "Shared Secret Data" },
180 { 0x9F2F, "Terminal Type" },
181 { 0x9F30, "Voice Privacy Mask" },
182 { 0x9F31, "System Capabilities" },
183 { 0x9F32, "Deny Access" },
184 { 0x9F33, "Update Count" },
185 { 0x9F34, "SSD Not Shared" },
186 { 0x9F35, "Extended MSCID" },
187 { 0x9F36, "Extended System My Type Code" },
188 { 0x9F37, "Control Channel Data" },
189 { 0x9F38, "System Access Data" },
190 { 0x9F39, "Cancellation Denied" },
191 { 0x9F3A, "Border Cell Access" },
192 { 0x9F3B, "CDMA Station Class Mark" },
193 { 0x9F3C, "CDMA Serving One Way Delay" },
194 { 0x9F3D, "CDMA Target One Way Delay" },
195 { 0x9F3E, "CDMA Call Mode" },
196 { 0x9F3F, "CDMA Channel Data" },
197 { 0x9F40, "CDMA Signal Quality" },
198 { 0x9F41, "CDMA Pilot Strength" },
199 { 0x9F42, "CDMA Mobile Protocol Revision" },
200 { 0x9F43, "CDMA Private Long Code Mask" },
201 { 0x9F44, "CDMA Code Channel" },
202 { 0x9F45, "CDMA Search Window" },
203 { 0x9F46, "MS Location" },
204 { 0x9F47, "Page Indicator" },
205 { 0x9F48, "Received Signal Quality" },
206 { 0x9F49, "Deregistration Type" },
207 { 0x9F4A, "NAMPS Channel Data" },
208 { 0x9F4B, "Alert Code" },
209 { 0x9F4C, "Announcement Code" },
210 { 0x9F4D, "Authentication Algorithm Version" },
211 { 0x9F4E, "Authentication Capability" },
212 { 0x9F4F, "Call History Count Expected" },
213 { 0x9F50, "Calling Party Number Digits 1" },
214 { 0x9F51, "Calling Party Number Digits 2" },
215 { 0x9F52, "Calling Party Number String 1" },
216 { 0x9F53, "Calling Party Number String 2" },
217 { 0x9F54, "Calling Party Subaddress" },
218 { 0x9F55, "Cancellation Type" },
219 { 0x9F56, "Carrier Digits" },
220 { 0x9F57, "Destination Digits" },
221 { 0x9F58, "DMH Redirection Indicator" },
222 { 0x9F59, "Inter System Termination" },
223 { 0x9F5A, "Availability Type" },
224 { 0x9F5B, "Local Termination" },
225 { 0x9F5C, "Message Waiting Notification Count" },
226 { 0x9F5D, "Mobile Directory Number" },
227 { 0x9F5E, "MSCID Number" },
228 { 0x9F5F, "PSTN Termination" },
229 { 0x9F60, "No Answer Time" },
230 { 0x9F61, "One Time Feature Indicator" },
231 { 0x9F62, "Origination Triggers" },
233 { 0x9F64, "Redirecting Number Digits" },
234 { 0x9F65, "Redirecting Number String" },
235 { 0x9F66, "Redirecting Number Subaddress" },
236 { 0x9F67, "Sender Identification Number" },
237 { 0x9F68, "SMS Address" },
238 { 0x9F69, "SMS Bearer Data" },
239 { 0x9F6A, "SMS Charge Indicator" },
240 { 0x9F6B, "SMS Destination Address" },
241 { 0x9F6C, "SMS Message Count" },
242 { 0x9F6D, "SMS Notification Indicator" },
243 { 0x9F6E, "SMS Original Destination Address" },
244 { 0x9F6F, "SMS Original Destination Subaddress" },
245 { 0x9F70, "SMS Original Originating Address" },
246 { 0x9F71, "SMS Original Originating Subaddress" },
247 { 0x9F72, "SMS Originating Address" },
248 { 0x9F73, "SMS Originating Restrictions" },
249 { 0x9F74, "SMS Teleservice Identifier" },
250 { 0x9F75, "SMS Termination Restrictions" },
251 { 0x9F76, "SMS Message Waiting Indicator" },
252 { 0x9F77, "Termination Access Type" },
253 { 0x9F78, "Termination List" },
254 { 0x9F79, "Termination Treatment" },
255 { 0x9F7A, "Termination Triggers" },
256 { 0x9F7B, "Transaction Capability" },
257 { 0x9F7C, "Unique Challenge Report" },
261 static const value_string ansi_param_3_strings[] = {
262 { 0x9F8100, "Action Code" },
263 { 0x9F8101, "Alert Result" },
264 { 0xBF8102, "Announcement List" },
265 { 0xBF8103, "CDMA Code Channel Information" },
266 { 0xBF8104, "CDMA Code Channel List" },
267 { 0xBF8105, "CDMA Target Measurement Information" },
268 { 0xBF8106, "CDMA Target Measurement List" },
269 { 0xBF8107, "CDMA Target MAHO Information" },
270 { 0xBF8108, "CDMA Target MAHO List" },
271 { 0x9F8109, "Conference Calling Indicator" },
272 { 0x9F810A, "Count Update Report" },
273 { 0x9F810B, "Digit Collection Control" },
274 { 0x9F810C, "DMH Account Code Digits" },
275 { 0x9F810D, "DMH Alternate Billing Digits" },
276 { 0x9F810E, "DMH Billing Digits" },
277 { 0x9F810F, "Geographic Authorization" },
278 { 0x9F8110, "Leg Information" },
279 { 0x9F8111, "Message Waiting Notification Type" },
280 { 0x9F8112, "PACA Indicator" },
281 { 0x9F8113, "Preferred Language Indicator" },
282 { 0x9F8114, "Random Valid Time" },
283 { 0x9F8115, "Restriction Digits" },
284 { 0x9F8116, "Routing Digits" },
285 { 0x9F8117, "Setup Result" },
286 { 0x9F8118, "SMS Access Denied Reason" },
287 { 0x9F8119, "SMS Cause Code" },
288 { 0x9F811A, "SPINI PIN" },
289 { 0x9F811B, "SPINI Triggers" },
290 { 0x9F811C, "SSD Update Report" },
291 { 0x9F811D, "Target Measurement Information" },
292 { 0x9F811E, "Target Measurement List" },
293 { 0x9F811F, "Voice Mailbox PIN" },
294 { 0x9F8120, "Voice Mailbox Number" },
295 { 0x9F8121, "Authentication Data" },
296 { 0x9F8122, "Conditionally Denied Reason" },
297 { 0x9F8123, "Group Information" },
298 { 0x9F8124, "Handoff State" },
299 { 0x9F8125, "NAMPS Call Mode" },
300 { 0x9F8126, "CDMA Slot Cycle Index" },
301 { 0x9F8127, "Denied Authorization Period" },
302 { 0x9F8128, "Pilot Number" },
303 { 0x9F8129, "Pilot Billing ID" },
304 { 0x9F812A, "CDMA Band Class" },
305 { 0x9F8172, "International Mobile Subscriber Identity" },
306 { 0x9F8173, "Calling Party Name" },
307 { 0x9F8174, "Display Text" },
308 { 0x9F8175, "Redirecting Party Name" },
309 { 0x9F8176, "Service ID" },
310 { 0x9F8177, "All Or None" },
311 { 0x9F8178, "Change" },
312 { 0xBF8179, "Data Access Element" },
313 { 0xBF817A, "Data Access Element List" },
314 { 0xBF817E, "Data Update Result" },
315 { 0xBF817F, "Data Update Result List" },
316 { 0x9F812D, "CDMA Pilot PN" },
317 { 0x9F812E, "CDMA Service Configuration Record" },
318 { 0x9F812F, "CDMA Service Option" },
319 { 0x9F8131, "CDMA Station Class Mark 2" },
320 { 0x9F8132, "TDMA Service Code" },
321 { 0x9F8133, "TDMA Terminal Capability" },
322 { 0x9F8134, "TDMA Voice Coder" },
323 { 0x9F8135, "A-Key Protocol Version" },
324 { 0x9F8136, "Authentication Response Reauthentication" },
325 { 0x9F8137, "Base Station Partial Key" },
326 { 0x9F8138, "Mobile Station MIN" },
327 { 0x9F8139, "Mobile Station Partial Key" },
328 { 0x9F813A, "Modulus Value" },
329 { 0x9F813B, "Newly Assigned MIN" },
330 { 0x9F813D, "OTASP Result Code" },
331 { 0x9F813E, "Primitive Value" },
332 { 0x9F813F, "Random Variable Reauthentication" },
333 { 0x9F8140, "Reauthentication Report" },
334 { 0x9F8141, "Service Indicator" },
335 { 0x9F8142, "Signaling Message Encryption Report" },
336 { 0x9F8143, "Temporary Reference Number" },
337 { 0x9F8144, "Voice Privacy Report" },
338 { 0x9F8147, "Control Channel Mode" },
339 { 0x9F8152, "CDMA Connection Reference" },
340 { 0x9F8153, "CDMA Connection Reference Information" },
341 { 0x9F8154, "CDMA Connection Reference List" },
342 { 0x9F8156, "Change Service Attributes" },
343 { 0x9F8157, "Data Key" },
344 { 0x9F8158, "Data Privacy Parameters" },
345 { 0x9F8159, "ISLP Information" }, /* IS-737 *SPEC CONFLICT* */
346 { 0x9F815A, "Reason List" },
347 { 0x9F815C, "TDMA Bandwidth" },
348 { 0x9F815D, "TDMA Data Features Indicator" },
349 { 0x9F815E, "TDMA Data Mode" },
350 { 0x9F815F, "TDMA Voice Mode" },
351 { 0x9F8160, "Analog Redirect Info" },
352 { 0xBF812B, "CDMA Band Class Information" },
353 { 0xBF812C, "CDMA Band Class List" },
354 { 0xBF8130, "CDMA Service Option List" },
355 { 0xBF8153, "CDMA Connection Reference Information" },
356 { 0xBF8154, "CDMA Connection Reference List" },
357 { 0xBF8161, "Analog Redirect Record" },
358 { 0xBF8202, "Execute Script" },
359 { 0xBF8206, "Modification Request" },
360 { 0xBF8207, "Modification Request List" },
361 { 0xBF8208, "Modification Result List" },
362 { 0xBF820E, "Service Data Access Element" },
363 { 0xBF820F, "Service Data Access Element List" },
364 { 0xBF8210, "Service Data Result" },
365 { 0xBF8211, "Service Data Result List" },
366 { 0xBF8214, "Trigger Address List" },
367 { 0xBF8216, "Trigger List" },
368 { 0xBF8218, "WIN Capability" },
369 { 0xBF822F, "Call Recovery ID" },
370 { 0xBF8230, "Call Recovery ID List" },
371 { 0xBF8250, "Position Information" },
372 { 0xBF825A, "CDMA PSMM List" },
373 { 0x9F8162, "CDMA Channel Number" },
374 { 0xBF8163, "CDMA Channel Number List" },
375 { 0x9F8164, "CDMA Power Combined Indicator" },
376 { 0x9F8165, "CDMA Redirect Record" },
377 { 0x9F8166, "CDMA Search Parameters" },
378 { 0x9F8168, "CDMA Network Identification" },
379 { 0x9F8169, "Network TMSI" },
380 { 0x9F816A, "Network TMSI Expiration Time" },
381 { 0x9F816B, "New Network TMSI" },
382 { 0x9F816C, "Required Parameters Mask" },
383 { 0x9F816D, "Service Redirection Cause" },
384 { 0x9F816E, "Service Redirection Info" },
385 { 0x9F816F, "Roaming Indication" },
386 { 0x9F8170, "MSID" },
387 { 0x9F817B, "Data ID" },
388 { 0x9F817C, "Database Key" },
389 { 0x9F817D, "Data Result" },
390 { 0x9F8200, "Data Value" },
391 { 0x9F8203, "Failure Cause" },
392 { 0x9F8204, "Failure Type" },
393 { 0x9F8205, "Global Title" },
394 { 0x9F8209, "Private Specialized Resource" },
395 { 0x9F820A, "Resume PIC" },
396 { 0x9F820B, "Script Argument" },
397 { 0x9F820C, "Script Name" },
398 { 0x9F820D, "Script Result" },
399 { 0x9F8212, "Specialized Resource" },
400 { 0x9F8213, "Time Date Offset" },
401 { 0x9F8215, "Trigger Capability" },
402 { 0x9F8217, "Trigger Type" },
403 { 0x9F8219, "WIN Operations Capability" },
404 { 0x9F821B, "WIN Trigger List" },
405 { 0x9F821C, "MSC Address" },
406 { 0x9F821D, "Suspicious Access" },
407 { 0x9F821E, "Mobile Station IMSI" },
408 { 0x9F821F, "Newly Assigned IMSI" },
409 { 0x9F822A, "Command Code" },
410 { 0x9F822B, "Display Text 2" },
411 { 0x9F822C, "Page Count" },
412 { 0x9F822D, "Page Response Time" },
413 { 0x9F822E, "SMS Transaction ID" },
414 { 0x9F8231, "DMH Service ID" },
415 { 0x9F8232, "Feature Indicator" },
416 { 0x9F8233, "Control Network ID" },
417 { 0x9F8234, "Release Cause" },
418 { 0x9F8235, "Time Of Day" },
419 { 0x9F8236, "Call Status" },
420 { 0x9F8237, "DMH Charge Information" },
421 { 0x9F8238, "DMH Billing Indicator" },
422 { 0x9F8239, "MS Status" },
423 { 0x9F823B, "Position Information Code" },
424 { 0x9F8246, "Inter Message Time" },
425 { 0x9F8247, "MSID Usage" },
426 { 0x9F8248, "New MIN Extension" },
427 { 0x9F8249, "DTX Indication" },
428 { 0x9F824A, "CDMA Mobile Capabilities" },
429 { 0x9F824B, "Generalized Time" },
430 { 0x9F824C, "Generic Digits" },
431 { 0x9F824D, "Geographic Position" },
432 { 0x9F824E, "Mobile Call Status" },
433 { 0x9F824F, "Mobile Position Capability" },
434 { 0x9F8251, "Position Request Type" },
435 { 0x9F8252, "Position Result" },
436 { 0x9F8253, "Position Source" },
437 { 0x9F8254, "ACG Encountered" },
438 { 0x9F8255, "CDMA State/Control Type *" }, /* PN-3590 (ANSI-41-E)/ACG *SPEC CONFLICT* */
439 { 0x9F8256, "Gap Duration" },
440 { 0x9F8257, "SCF Overload Gap Interval" },
441 { 0x9F8258, "Service Management System Gap Interval" },
442 { 0x9F8259, "CDMA PSMM Count" },
443 { 0x9F825B, "CDMA Serving One Way Delay 2" },
444 { 0x9F825C, "QoS Priority" },
445 { 0x9F825D, "PDSN Address" },
446 { 0x9F825E, "PDSN Protocol Type" },
447 { 0x9F825F, "CDMA MS Measured Channel Identity" },
448 { 0x9F8261, "Range" },
449 { 0x9F8263, "Calling Party Category" },
450 { 0x9F8264, "cdma2000 Handoff Invoke IOS Data" },
451 { 0x9F8265, "cdma2000 Handoff Response IOS Data" },
452 { 0x9F8266, "LCS Client ID" },
453 { 0x9F8267, "TDMA MAHO Cell ID" },
454 { 0x9F8268, "TDMA MAHO Channel" },
455 { 0x9F8269, "CDMA Service Option Connection Identifier" },
456 { 0x9F826A, "TDMA Time Alignment" },
457 { 0x9F826C, "TDMA MAHO Request" },
461 /* ANSI TCAP component type */
462 #define ANSI_TC_INVOKE_L 0xe9
463 #define ANSI_TC_RRL 0xea
464 #define ANSI_TC_RE 0xeb
465 #define ANSI_TC_REJECT 0xec
466 #define ANSI_TC_INVOKE_N 0xed
467 #define ANSI_TC_RRN 0xee
469 static const value_string ansi_cmp_type_strings[] = {
470 { ANSI_TC_INVOKE_L, "Invoke(Last)" },
471 { ANSI_TC_RRL, "RetRes(Last)" },
472 { ANSI_TC_RE, "RetErr" },
473 { ANSI_TC_REJECT, "Reject" },
474 { ANSI_TC_INVOKE_N, "Invoke(Not Last)" },
475 { ANSI_TC_RRN, "RetRes(Not Last)" },
479 static const value_string ansi_opr_code_strings[] = {
480 { 1, "Handoff Measurement Request" },
481 { 2, "Facilities Directive" },
482 { 3, "Mobile On Channel" },
483 { 4, "Handoff Back" },
484 { 5, "Facilities Release" },
485 { 6, "Qualification Request" },
486 { 7, "Qualification Directive" },
489 { 10, "Reset Circuit" },
490 { 11, "Trunk Test" },
491 { 12, "Trunk Test Disconnect" },
492 { 13, "Registration Notification" },
493 { 14, "Registration Cancellation" },
494 { 15, "Location Request" },
495 { 16, "Routing Request" },
496 { 17, "Feature Request" },
497 { 18, "Reserved 18 (Service Profile Request, IS-41-C)" },
498 { 19, "Reserved 19 (Service Profile Directive, IS-41-C)" },
499 { 20, "Unreliable Roamer Data Directive" },
500 { 21, "Reserved 21 (Call Data Request, IS-41-C)" },
501 { 22, "MS Inactive" },
502 { 23, "Transfer To Number Request" },
503 { 24, "Redirection Request" },
504 { 25, "Handoff To Third" },
505 { 26, "Flash Request" },
506 { 27, "Authentication Directive" },
507 { 28, "Authentication Request" },
508 { 29, "Base Station Challenge" },
509 { 30, "Authentication Failure Report" },
510 { 31, "Count Request" },
511 { 32, "Inter System Page" },
512 { 33, "Unsolicited Response" },
513 { 34, "Bulk Deregistration" },
514 { 35, "Handoff Measurement Request 2" },
515 { 36, "Facilities Directive 2" },
516 { 37, "Handoff Back 2" },
517 { 38, "Handoff To Third 2" },
518 { 39, "Authentication Directive Forward" },
519 { 40, "Authentication Status Report" },
520 { 41, "Reserved 41" },
521 { 42, "Information Directive" },
522 { 43, "Information Forward" },
523 { 44, "Inter System Answer" },
524 { 45, "Inter System Page 2" },
525 { 46, "Inter System Setup" },
526 { 47, "Origination Request" },
527 { 48, "Random Variable Request" },
528 { 49, "Redirection Directive" },
529 { 50, "Remote User Interaction Directive" },
530 { 51, "SMS Delivery Backward" },
531 { 52, "SMS Delivery Forward" },
532 { 53, "SMS Delivery Point to Point" },
533 { 54, "SMS Notification" },
534 { 55, "SMS Request" },
535 { 56, "OTASP Request" },
536 { 57, "Information Backward" },
537 { 58, "Change Facilities" },
538 { 59, "Change Service" },
539 { 60, "Parameter Request" },
540 { 61, "TMSI Directive" },
541 { 62, "Reserved 62" },
542 { 63, "Service Request" },
543 { 64, "Analyzed Information Request" },
544 { 65, "Connection Failure Report" },
545 { 66, "Connect Resource" },
546 { 67, "Disconnect Resource" },
547 { 68, "Facility Selected and Available" },
548 { 69, "Instruction Request" },
550 { 71, "Reset Timer" },
552 { 73, "Seize Resource" },
553 { 74, "SRF Directive" },
555 { 76, "T NoAnswer" },
557 { 78, "SMS Delivery Point to Point Ack" },
558 { 79, "Message Directive" },
559 { 80, "Bulk Disconnection" },
560 { 81, "Call Control Directive" },
562 { 83, "O Disconnect" },
563 { 84, "Call Recovery Report" },
565 { 86, "T Disconnect" },
566 { 87, "Unreliable Call Data" },
567 { 88, "O CalledPartyBusy" },
568 { 89, "O NoAnswer" },
569 { 90, "Position Request" },
570 { 91, "Position Request Forward" },
571 { 92, "Call Termination Report" },
572 { 93, "Geo Position Directive" },
573 { 94, "Geo Position Request" },
574 { 95, "Inter System Position Request" },
575 { 96, "Inter System Position Request Forward" },
576 { 97, "ACG Directive" },
577 { 98, "Roamer Database Verification Request" },
578 { 99, "Add Service" },
579 { 100, "Drop Service" },
583 static const value_string ansi_tele_strings[] = {
584 { 1, "Reserved for maintenance" },
585 { 4096, "AMPS Extended Protocol Enhanced Services" },
586 { 4097, "CDMA Cellular Paging Teleservice" },
587 { 4098, "CDMA Cellular Messaging Teleservice" },
588 { 4099, "CDMA Voice Mail Notification" },
589 { 32513, "TDMA Cellular Messaging Teleservice" },
590 { 32520, "TDMA System Assisted Mobile Positioning through Satellite (SAMPS)" },
591 { 32584, "TDMA Segmented System Assisted Mobile Positioning Service" },
595 #define NUM_BAND_CLASS_STR (sizeof(band_class_str)/sizeof(gchar *))
596 static gchar *band_class_str[] = {
597 "800 MHz Cellular System",
598 "1.850 to 1.990 GHz Broadband PCS",
599 "872 to 960 MHz TACS Band",
600 "832 to 925 MHz JTACS Band",
601 "1.750 to 1.870 GHz Korean PCS",
603 "2 GHz IMT-2000 Band",
604 "North American 700 MHz Cellular Band",
605 "1.710 to 1.880 GHz PCS",
606 "880 to 960 MHz Band",
607 "Secondary 800 MHz Band",
608 "400 MHz European PAMR Band",
609 "800 MHz European PAMR Band"
612 #define NUM_QOS_PRI_STR (sizeof(qos_pri_str)/sizeof(gchar *))
613 static gchar *qos_pri_str[] = {
614 "Priority Level 0. This is the lowest level",
628 "Reserved, treat as Priority Level 14",
629 "Reserved, treat as Priority Level 15"
632 /* Initialize the protocol and registered fields */
633 static int proto_ansi_map = -1;
634 static int hf_ansi_map_none = -1;
635 static int hf_ansi_map_tag = -1;
636 static int hf_ansi_map_length = -1;
637 static int hf_ansi_map_id = -1;
638 static int hf_ansi_map_opr_code = -1;
639 static int hf_ansi_map_param_id = -1;
642 /* Initialize the subtree pointers */
643 static gint ett_ansi_map = -1;
644 static gint ett_opr_code = -1;
645 static gint ett_component = -1;
646 static gint ett_components = -1;
647 static gint ett_params = -1;
648 static gint ett_param = -1;
649 static gint ett_error = -1;
650 static gint ett_problem = -1;
651 static gint ett_natnum = -1;
652 static gint ett_call_mode = -1;
653 static gint ett_chan_data = -1;
654 static gint ett_code_chan = -1;
655 static gint ett_clr_dig_mask = -1;
656 static gint ett_ent_dig_mask = -1;
657 static gint ett_all_dig_mask = -1;
660 static char bigbuf[1024];
661 static dissector_handle_t data_handle;
662 static dissector_table_t is637_tele_id_dissector_table; /* IS-637 Teleservice ID */
663 static dissector_table_t is683_dissector_table; /* IS-683-A (OTA) */
664 static packet_info *g_pinfo;
665 static proto_tree *g_tree;
666 static gint32 ansi_map_sms_tele_id = -1;
667 static gboolean is683_ota;
668 static gboolean ansi_map_is_invoke;
671 typedef struct dgt_set_t
673 unsigned char out[15];
677 static dgt_set_t Dgt_tbcd = {
679 /* 0 1 2 3 4 5 6 7 8 9 a b c d e */
680 '0','1','2','3','4','5','6','7','8','9','?','B','C','*','#'
684 static dgt_set_t Dgt_msid = {
686 /* 0 1 2 3 4 5 6 7 8 9 a b c d e */
687 '0','1','2','3','4','5','6','7','8','9','?','?','?','?','?'
694 * Unpack BCD input pattern into output ASCII pattern
696 * Input Pattern is supplied using the same format as the digits
698 * Returns: length of unpacked pattern
702 char *out, /* ASCII pattern out */
703 guchar *in, /* packed pattern in */
704 int num_octs, /* Number of octets to unpack */
705 dgt_set_t *dgt /* Digit definitions */
714 * unpack first value in byte
717 *out++ = dgt->out[i & 0x0f];
721 * unpack second value in byte
725 if (i == 0x0f) /* odd number bytes - hit filler */
728 *out++ = dgt->out[i];
738 /* Generate, into "buf", a string showing the bits of a bitfield.
739 * Return a pointer to the character after that string.
742 my_decode_bitfield_value(char *buf, guint32 val, guint32 mask, int width)
750 bit = 1 << (width - 1);
756 /* This bit is part of the field. Show its value. */
768 /* This bit is not part of the field. */
775 if (i >= width) break;
777 if (i % 4 == 0) *p++ = ' ';
786 my_match_strval(guint32 val, const value_string *vs, gint *idx)
792 if (vs[i].value == val)
795 return(vs[i].strptr);
806 /* PARAM FUNCTIONS */
808 #define EXTRANEOUS_DATA_CHECK(edc_len, edc_max_len) \
809 if ((edc_len) > (edc_max_len)) \
811 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb, \
812 asn1->offset, (edc_len) - (edc_max_len), "Extraneous Data"); \
813 asn1->offset += ((edc_len) - (edc_max_len)); \
816 #define SHORT_DATA_CHECK(sdc_len, sdc_min_len) \
817 if ((sdc_len) < (sdc_min_len)) \
819 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb, \
820 asn1->offset, (sdc_len), "Short Data (?)"); \
821 asn1->offset += (sdc_len); \
825 #define EXACT_DATA_CHECK(edc_len, edc_eq_len) \
826 if ((edc_len) != (edc_eq_len)) \
828 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb, \
829 asn1->offset, (edc_len), "Unexpected Data Length"); \
830 asn1->offset += (edc_len); \
835 param_mscid(ASN1_SCK *asn1, proto_tree *tree, guint len)
837 gint32 market_id, switch_num;
840 EXACT_DATA_CHECK(len, 3);
842 saved_offset = asn1->offset;
844 asn1_int32_value_decode(asn1, 2, &market_id);
845 asn1_int32_value_decode(asn1, 1, &switch_num);
847 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
848 saved_offset, asn1->offset - saved_offset,
849 "Market ID %d Switch Number %d",
850 market_id, switch_num);
854 param_page_ind(ASN1_SCK *asn1, proto_tree *tree, guint len)
860 saved_offset = asn1->offset;
862 asn1_int32_value_decode(asn1, 1, &value);
866 case 0: str = "Not used"; break;
867 case 1: str = "Page"; break;
868 case 2: str = "Listen only"; break;
870 if ((value >= 3) && (value <= 223)) { str = "Reserved, treat as Page"; }
871 else { str = "Reserved for protocol extension, treat as Page"; }
875 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
876 saved_offset, asn1->offset - saved_offset,
879 EXTRANEOUS_DATA_CHECK(len, 1);
883 param_srvc_ind(ASN1_SCK *asn1, proto_tree *tree, guint len)
889 EXACT_DATA_CHECK(len, 1);
891 saved_offset = asn1->offset;
893 asn1_int32_value_decode(asn1, 1, &value);
897 case 0: str = "Undefined Service"; break;
898 case 1: str = "CDMA OTASP Service"; is683_ota = TRUE; break;
899 case 2: str = "TDMA OTASP Service"; break;
900 case 3: str = "CDMA OTAPA Service"; is683_ota = TRUE; break;
901 case 4: str = "CDMA Position Determination Service"; break;
902 case 5: str = "AMPS Position Determination Service"; break;
904 if ((value >= 6) && (value <= 223)) { str = "Reserved, treat as Undefined Service"; }
905 else { str = "Reserved for protocol extension, treat as Undefined Service"; }
909 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
910 saved_offset, asn1->offset - saved_offset,
917 param_sme_report(ASN1_SCK *asn1, proto_tree *tree, guint len)
923 EXACT_DATA_CHECK(len, 1);
925 saved_offset = asn1->offset;
927 asn1_int32_value_decode(asn1, 1, &value);
931 case 0: str = "Not used"; break;
932 case 1: str = "Signaling Message Encryption enabling not attempted"; break;
933 case 2: str = "Signaling Message Encryption enabling no response"; break;
934 case 3: str = "Signaling Message Encryption is enabled"; break;
935 case 4: str = "Signaling Message Encryption enabling failed"; break;
937 if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as Signaling Message Encryption enabling not attempted"; }
938 else { str = "Reserved for protocol extension, treat as Signaling Message Encryption enabling not attempted"; }
942 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
943 saved_offset, asn1->offset - saved_offset,
950 param_alert_code(ASN1_SCK *asn1, proto_tree *tree, guint len)
956 SHORT_DATA_CHECK(len, 2);
958 saved_offset = asn1->offset;
960 asn1_int32_value_decode(asn1, 1, &value);
962 switch ((value & 0xc0) >> 6)
964 case 0: str = "Medium"; break;
965 case 1: str = "High"; break;
966 case 2: str = "Low"; break;
967 case 3: str = "Reserved"; break;
970 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
971 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
972 saved_offset, asn1->offset - saved_offset,
977 switch (value & 0x3f)
979 case 0: str = "NoTone"; break;
980 case 1: str = "Long"; break;
981 case 2: str = "ShortShort"; break;
982 case 3: str = "ShortShortLong"; break;
983 case 4: str = "ShortShort2"; break;
984 case 5: str = "ShortLongShort"; break;
985 case 6: str = "ShortShortShortShort"; break;
986 case 7: str = "PBXLong"; break;
987 case 8: str = "PBXShortShort"; break;
988 case 9: str = "PBXShortShortLong"; break;
989 case 10: str = "PBXShortLongShort"; break;
990 case 11: str = "PBXShortShortShortShort"; break;
991 case 12: str = "PipPipPipPip"; break;
993 str = "Reserved, treat as NoTone";
997 my_decode_bitfield_value(bigbuf, value, 0x3f, 8);
998 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
999 saved_offset, asn1->offset - saved_offset,
1004 saved_offset = asn1->offset;
1006 asn1_int32_value_decode(asn1, 1, &value);
1008 my_decode_bitfield_value(bigbuf, value, 0xf8, 8);
1009 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1010 saved_offset, asn1->offset - saved_offset,
1014 switch (value & 0x07)
1016 case 0: str = "Alert without waiting to report"; break;
1017 case 1: str = "Apply a reminder alert once"; break;
1019 str = "Reserved, treat as Alert without waiting to report";
1023 my_decode_bitfield_value(bigbuf, value, 0x07, 8);
1024 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1025 saved_offset, asn1->offset - saved_offset,
1026 "%s : Alert Action, %s",
1030 EXTRANEOUS_DATA_CHECK(len, 2);
1034 param_term_acc_type(ASN1_SCK *asn1, proto_tree *tree, guint len)
1040 saved_offset = asn1->offset;
1042 asn1_int32_value_decode(asn1, 1, &value);
1046 case 0: str = "Not used"; break;
1047 case 252: str = "Mobile-to-Mobile Directory Number access"; break;
1048 case 253: str = "Land-to-Mobile Directory Number access"; break;
1049 case 254: str = "Land-to-Mobile Directory Number access"; break;
1050 case 255: str = "Roamer port access"; break;
1052 if ((value >= 1) && (value <= 127)) { str = "Reserved for controlling system assignment"; }
1053 else if ((value >= 128) && (value <= 160)) { str = "Reserved for protocol extension, treat as Land-to-Mobile Directory Number access"; }
1054 else { str = "Reserved"; }
1058 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1059 saved_offset, asn1->offset - saved_offset,
1062 EXTRANEOUS_DATA_CHECK(len, 1);
1066 param_term_treat(ASN1_SCK *asn1, proto_tree *tree, guint len)
1072 saved_offset = asn1->offset;
1074 asn1_int32_value_decode(asn1, 1, &value);
1078 case 0: str = "Not used"; break;
1079 case 1: str = "MS Termination"; break;
1080 case 2: str = "Voice Mail Storage"; break;
1081 case 3: str = "Voice Mail Retrieval"; break;
1082 case 4: str = "Dialogue Termination"; break;
1084 if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as Unrecognized parameter value"; }
1085 else { str = "Reserved for protocol extension, treat as Unrecognized parameter value"; }
1089 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1090 saved_offset, asn1->offset - saved_offset,
1093 EXTRANEOUS_DATA_CHECK(len, 1);
1097 param_term_trig(ASN1_SCK *asn1, proto_tree *tree, guint len)
1103 SHORT_DATA_CHECK(len, 2);
1105 saved_offset = asn1->offset;
1107 asn1_int32_value_decode(asn1, 1, &value);
1109 switch ((value & 0xc0) >> 6)
1111 case 0: str = "No Answer Call"; break;
1112 case 1: str = "No Answer Trigger"; break;
1113 case 2: str = "No Answer Leg"; break;
1114 case 3: str = "Reserved"; break;
1117 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
1118 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1119 saved_offset, asn1->offset - saved_offset,
1120 "%s : No Answer (NA), %s",
1124 switch ((value & 0x30) >> 4)
1126 case 0: str = "No Page Response Call"; break;
1127 case 1: str = "No Page Response Trigger"; break;
1128 case 2: str = "No Page Response Leg"; break;
1129 case 3: str = "Reserved"; break;
1132 my_decode_bitfield_value(bigbuf, value, 0x30, 8);
1133 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1134 saved_offset, asn1->offset - saved_offset,
1135 "%s : No Page Response (NPR), %s",
1139 switch ((value & 0x0c) >> 2)
1141 case 0: str = "Failed Call"; break;
1142 case 1: str = "Routing Failure Trigger"; break;
1143 case 2: str = "Failed Leg"; break;
1144 case 3: str = "Reserved"; break;
1147 my_decode_bitfield_value(bigbuf, value, 0x0c, 8);
1148 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1149 saved_offset, asn1->offset - saved_offset,
1150 "%s : Routing Failure (RF), %s",
1154 switch (value & 0x03)
1156 case 0: str = "Busy Call"; break;
1157 case 1: str = "Busy Trigger"; break;
1158 case 2: str = "Busy Leg"; break;
1159 case 3: str = "Reserved"; break;
1162 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
1163 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1164 saved_offset, asn1->offset - saved_offset,
1169 saved_offset = asn1->offset;
1171 asn1_int32_value_decode(asn1, 1, &value);
1173 my_decode_bitfield_value(bigbuf, value, 0xfe, 8);
1174 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1175 saved_offset, asn1->offset - saved_offset,
1179 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
1180 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1181 saved_offset, asn1->offset - saved_offset,
1182 "%s : None Reachable (NR), %s",
1184 (value & 0x01) ? "Group Not Reachable" : "Member Not Reachable");
1186 EXTRANEOUS_DATA_CHECK(len, 2);
1190 param_aav(ASN1_SCK *asn1, proto_tree *tree, guint len)
1195 saved_offset = asn1->offset;
1197 asn1_int32_value_decode(asn1, 1, &value);
1199 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1200 saved_offset, asn1->offset - saved_offset,
1201 "Value as used in the CAVE algorithm (%d)",
1204 EXTRANEOUS_DATA_CHECK(len, 1);
1208 param_ann_code(ASN1_SCK *asn1, proto_tree *tree, guint len)
1214 SHORT_DATA_CHECK(len, 3);
1216 saved_offset = asn1->offset;
1218 asn1_int32_value_decode(asn1, 1, &value);
1222 case 0: str = "Dialtone"; break;
1223 case 1: str = "Ringback or Audible Alerting"; break;
1224 case 2: str = "Intercept or Mobile Reorder"; break;
1225 case 3: str = "Congestion or Reorder"; break;
1226 case 4: str = "Busy"; break;
1227 case 5: str = "Confirmation"; break;
1228 case 6: str = "Answer"; break;
1229 case 7: str = "Call Waiting"; break;
1230 case 8: str = "Offhook"; break;
1231 case 17: str = "Recall Dial"; break;
1232 case 18: str = "Barge In"; break;
1233 case 20: str = "PPC Insufficient"; break;
1234 case 21: str = "PPC Warning 1"; break;
1235 case 22: str = "PPC Warning 2"; break;
1236 case 23: str = "PPC Warning 3"; break;
1237 case 24: str = "PPC Disconnect"; break;
1238 case 25: str = "PPC Redirect"; break;
1239 case 63: str = "Tones Off"; break;
1240 case 192: str = "Pip"; break;
1241 case 193: str = "Abbreviated Intercept"; break;
1242 case 194: str = "Abbreviated Congestion"; break;
1243 case 195: str = "Warning"; break;
1244 case 196: str = "Denial Tone Burst"; break;
1245 case 197: str = "Dial Tone Burst"; break;
1246 case 250: str = "Incoming Additional Call"; break;
1247 case 251: str = "Priority Additional Call"; break;
1249 str = "Reserved, treat as Tones Off";
1253 my_decode_bitfield_value(bigbuf, value, 0xff, 8);
1254 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1255 saved_offset, asn1->offset - saved_offset,
1261 saved_offset = asn1->offset;
1263 asn1_int32_value_decode(asn1, 1, &value);
1265 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
1266 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1267 saved_offset, asn1->offset - saved_offset,
1271 switch (value & 0x0f)
1273 case 0: str = "Concurrent"; break;
1274 case 1: str = "Sequential"; break;
1276 if ((value >= 2) && (value <= 7)) { str = "Reserved, treat as Concurrent"; }
1277 else { str = "Reserved, treat as Sequential"; }
1281 my_decode_bitfield_value(bigbuf, value, 0x0f, 8);
1282 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1283 saved_offset, asn1->offset - saved_offset,
1288 saved_offset = asn1->offset;
1290 asn1_int32_value_decode(asn1, 1, &value);
1294 case 0: str = "None"; break;
1295 case 1: str = "Unauthorized User"; break;
1296 case 2: str = "Invalid ESN"; break;
1297 case 3: str = "Unauthorized Mobile"; break;
1298 case 4: str = "Suspended Origination"; break;
1299 case 5: str = "Origination Denied"; break;
1300 case 6: str = "Service Area Denial"; break;
1301 case 16: str = "Partial Dial"; break;
1302 case 17: str = "Require 1 Plus"; break;
1303 case 18: str = "Require 1 Plus NPA"; break;
1304 case 19: str = "Require 0 Plus"; break;
1305 case 20: str = "Require 0 Plus NPA"; break;
1306 case 21: str = "Deny 1 Plus"; break;
1307 case 22: str = "Unsupported 10 plus"; break;
1308 case 23: str = "Deny 10 plus"; break;
1309 case 24: str = "Unsupported 10 XXX"; break;
1310 case 25: str = "Deny 10 XXX"; break;
1311 case 26: str = "Deny 10 XXX Locally"; break;
1312 case 27: str = "Require 10 Plus"; break;
1313 case 28: str = "Require NPA"; break;
1314 case 29: str = "Deny Toll Origination"; break;
1315 case 30: str = "Deny International Origination"; break;
1316 case 31: str = "Deny 0 Minus"; break;
1317 case 48: str = "Deny Number"; break;
1318 case 49: str = "Alternate Operator Services"; break;
1319 case 64: str = "No Circuit or All Circuits Busy or FacilityProblem"; break;
1320 case 65: str = "Overload"; break;
1321 case 66: str = "Internal Office Failure"; break;
1322 case 67: str = "No Wink Received"; break;
1323 case 68: str = "Interoffice Link Failure"; break;
1324 case 69: str = "Vacant"; break;
1325 case 70: str = "Invalid Prefix or Invalid Access Code"; break;
1326 case 71: str = "Other Dialing Irregularity"; break;
1327 case 80: str = "Vacant Number or Disconnected Number"; break;
1328 case 81: str = "Deny Termination"; break;
1329 case 82: str = "Suspended Termination"; break;
1330 case 83: str = "Changed Number"; break;
1331 case 84: str = "Inaccessible Subscriber"; break;
1332 case 85: str = "Deny Incoming Toll"; break;
1333 case 86: str = "Roamer Access Screening"; break;
1334 case 87: str = "Refuse Call"; break;
1335 case 88: str = "Redirect Call"; break;
1336 case 89: str = "No Page Response"; break;
1337 case 90: str = "No Answer"; break;
1338 case 96: str = "Roamer Intercept"; break;
1339 case 97: str = "General Information"; break;
1340 case 112: str = "Unrecognized Feature Code"; break;
1341 case 113: str = "Unauthorized Feature Code"; break;
1342 case 114: str = "Restricted Feature Code"; break;
1343 case 115: str = "Invalid Modifier Digits"; break;
1344 case 116: str = "Successful Feature Registration"; break;
1345 case 117: str = "Successful Feature Deregistration"; break;
1346 case 118: str = "Successful Feature Activation"; break;
1347 case 119: str = "Successful Feature Deactivation"; break;
1348 case 120: str = "Invalid Forward To Number"; break;
1349 case 121: str = "Courtesy Call Warning"; break;
1350 case 128: str = "Enter PIN Send Prompt"; break;
1351 case 129: str = "Enter PIN Prompt"; break;
1352 case 130: str = "Reenter PIN Send Prompt"; break;
1353 case 131: str = "Reenter PIN Prompt"; break;
1354 case 132: str = "Enter Old PIN Send Prompt"; break;
1355 case 133: str = "Enter Old PIN Prompt"; break;
1356 case 134: str = "Enter New PIN Send Prompt"; break;
1357 case 135: str = "Enter New PIN Prompt"; break;
1358 case 136: str = "Reenter New PIN Send Prompt"; break;
1359 case 137: str = "Reenter New PIN Prompt"; break;
1360 case 138: str = "Enter Password Prompt"; break;
1361 case 139: str = "Enter Directory Number Prompt"; break;
1362 case 140: str = "Reenter Directory Number Prompt"; break;
1363 case 141: str = "Enter Feature Code Prompt"; break;
1364 case 142: str = "Enter Credit Card Number Prompt"; break;
1365 case 143: str = "Enter Destination Number Prompt"; break;
1366 case 152: str = "PPC Insufficient Account Balance"; break;
1367 case 153: str = "PPC Five Minute Warning"; break;
1368 case 154: str = "PPC Three Minute Warning"; break;
1369 case 155: str = "PPC Two Minute Warning"; break;
1370 case 156: str = "PPC One Minute Warning"; break;
1371 case 157: str = "PPC Disconnect"; break;
1372 case 158: str = "PPC Redirect"; break;
1374 str = "Reserved, treat as None";
1378 my_decode_bitfield_value(bigbuf, value, 0xff, 8);
1379 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1380 saved_offset, asn1->offset - saved_offset,
1381 "%s : Standard Announcement, %s",
1385 if (len == 3) return;
1387 saved_offset = asn1->offset;
1389 asn1_int32_value_decode(asn1, 1, &value);
1391 my_decode_bitfield_value(bigbuf, value, 0xff, 8);
1392 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1393 saved_offset, asn1->offset - saved_offset,
1394 "%s : Custom Announcement %d",
1398 EXTRANEOUS_DATA_CHECK(len, 4);
1402 param_alert_res(ASN1_SCK *asn1, proto_tree *tree, guint len)
1408 saved_offset = asn1->offset;
1410 asn1_int32_value_decode(asn1, 1, &value);
1414 case 0: str = "Not specified"; break;
1415 case 1: str = "Success"; break;
1416 case 2: str = "Failure"; break;
1417 case 3: str = "Denied"; break;
1418 case 4: str = "Not attempted"; break;
1419 case 5: str = "No page response"; break;
1420 case 6: str = "Busy"; break;
1422 str = "Reserved, treat as Not specified";
1426 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1427 saved_offset, asn1->offset - saved_offset,
1430 EXTRANEOUS_DATA_CHECK(len, 1);
1434 param_conf_call_ind(ASN1_SCK *asn1, proto_tree *tree, guint len)
1440 saved_offset = asn1->offset;
1442 asn1_int32_value_decode(asn1, 1, &value);
1446 case 0: str = ", Not specified"; break;
1447 case 255: str = ", Unlimited number of conferees"; break;
1453 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1454 saved_offset, asn1->offset - saved_offset,
1455 "Maximum Number of Conferees, (%d)%s",
1459 EXTRANEOUS_DATA_CHECK(len, 1);
1463 param_count_upd_report(ASN1_SCK *asn1, proto_tree *tree, guint len)
1469 saved_offset = asn1->offset;
1471 asn1_int32_value_decode(asn1, 1, &value);
1475 case 0: str = "Not used"; break;
1476 case 1: str = "COUNT Update not attempted"; break;
1477 case 2: str = "COUNT Update no response"; break;
1478 case 3: str = "COUNT Update successful"; break;
1480 if ((value >= 4) && (value <= 223)) { str = "Reserved, treat as COUNT Update not attempted"; }
1481 else { str = "Reserved for protocol extension, treat as COUNT Update not attempted"; }
1485 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1486 saved_offset, asn1->offset - saved_offset,
1489 EXTRANEOUS_DATA_CHECK(len, 1);
1493 param_ssd_upd_report(ASN1_SCK *asn1, proto_tree *tree, guint len)
1499 saved_offset = asn1->offset;
1501 asn1_int32_value_decode(asn1, 1, &value);
1505 case 0: str = "Not used"; break;
1506 case 1: str = "SSD Update not attempted"; break;
1507 case 2: str = "SSD Update no response"; break;
1508 case 3: str = "SSD Update successful"; break;
1509 case 4: str = "SSD Update failed"; break;
1511 if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as SSD Update not attempted"; }
1512 else { str = "Reserved for protocol extension, treat as SSD Update not attempted"; }
1516 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1517 saved_offset, asn1->offset - saved_offset,
1520 EXTRANEOUS_DATA_CHECK(len, 1);
1524 param_cond_den_reason(ASN1_SCK *asn1, proto_tree *tree, guint len)
1530 EXACT_DATA_CHECK(len, 1);
1532 saved_offset = asn1->offset;
1534 asn1_int32_value_decode(asn1, 1, &value);
1538 case 0: str = "Not used"; break;
1539 case 1: str = "Waitable (i.e., Call Waiting is possible)"; break;
1541 if ((value >= 2) && (value <= 223)) { str = "Reserved, treat as Waitable"; }
1542 else { str = "Reserved for protocol extension, treat as Waitable"; }
1546 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1547 saved_offset, asn1->offset - saved_offset,
1552 param_den_auth_per(ASN1_SCK *asn1, proto_tree *tree, guint len)
1558 SHORT_DATA_CHECK(len, 2);
1560 saved_offset = asn1->offset;
1562 asn1_int32_value_decode(asn1, 1, &value);
1566 case 0: str = "Not used"; break;
1567 case 1: str = "Per Call. Re-authorization should be attempted on the next call attempt"; break;
1568 case 2: str = "Hours"; break;
1569 case 3: str = "Days"; break;
1570 case 4: str = "Weeks"; break;
1571 case 5: str = "Per Agreement"; break;
1572 case 6: str = "Reserved"; break;
1573 case 7: str = "Number of calls. Re-authorization should be attempted after this number of (rejected) call attempts"; break;
1574 case 8: str = "Minutes"; break;
1576 if ((value >= 9) && (value <= 223)) { str = "Reserved, treat as Per Call"; }
1577 else { str = "Reserved for protocol extension, treat as Per Call"; }
1581 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1582 saved_offset, asn1->offset - saved_offset,
1586 saved_offset = asn1->offset;
1588 asn1_int32_value_decode(asn1, 1, &value);
1590 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1591 saved_offset, asn1->offset - saved_offset,
1595 EXTRANEOUS_DATA_CHECK(len, 2);
1599 param_ho_state(ASN1_SCK *asn1, proto_tree *tree, guint len)
1604 saved_offset = asn1->offset;
1606 asn1_int32_value_decode(asn1, 1, &value);
1608 my_decode_bitfield_value(bigbuf, value, 0xfe, 8);
1609 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1610 saved_offset, asn1->offset - saved_offset,
1614 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
1615 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1616 saved_offset, asn1->offset - saved_offset,
1617 "%s : Party Involved (PI), %s",
1619 (value & 0x01) ? "Terminator is handing off" : "Originator is handing off");
1621 EXTRANEOUS_DATA_CHECK(len, 1);
1625 param_geo_auth(ASN1_SCK *asn1, proto_tree *tree, guint len)
1631 saved_offset = asn1->offset;
1633 asn1_int32_value_decode(asn1, 1, &value);
1637 case 0: str = "Not used"; break;
1638 case 1: str = "Authorized for all Market IDs served by the VLR"; break;
1639 case 2: str = "Authorized for this Market ID only"; break;
1640 case 3: str = "Authorized for this Market ID and Switch Number only"; break;
1641 case 4: str = "Authorized for this Location Area ID within a Market ID only"; break;
1643 if ((value >= 5) && (value <= 95)) { str = "Reserved, treat as Authorized for all Market IDs served by the VLR"; }
1644 else if ((value >= 96) && (value <= 127)) { str = "Reserved for protocol extension, treat as Authorized for all Market IDs served by the VLR"; }
1645 else if ((value >= 128) && (value <= 223)) { str = "Reserved, treat as Authorized for this Location Area ID within a Market ID only"; }
1646 else { str = "Reserved for protocol extension, treat as Authorized for this Location Area ID within a Market ID only"; }
1650 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1651 saved_offset, asn1->offset - saved_offset,
1654 EXTRANEOUS_DATA_CHECK(len, 1);
1658 param_mw_noti_type(ASN1_SCK *asn1, proto_tree *tree, guint len)
1664 saved_offset = asn1->offset;
1666 asn1_int32_value_decode(asn1, 1, &value);
1668 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
1669 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1670 saved_offset, asn1->offset - saved_offset,
1674 switch ((value & 0x0c) >> 2)
1676 case 0: str = "No MWI. Notification is not authorized or notification is not required"; break;
1677 case 1: str = "Reserved"; break;
1678 case 2: str = "MWI On. Notification is required. Messages waiting"; break;
1679 case 3: str = "MWI Off. Notification is required. No messages waiting"; break;
1682 my_decode_bitfield_value(bigbuf, value, 0x0c, 8);
1683 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1684 saved_offset, asn1->offset - saved_offset,
1685 "%s : Message Waiting Indication (MWI), %s",
1689 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
1690 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1691 saved_offset, asn1->offset - saved_offset,
1692 "%s : Alert Pip Tone (APT), %s",
1694 (value & 0x02) ? "notification is required" : "notification is not authorized or notification is not required");
1696 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
1697 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1698 saved_offset, asn1->offset - saved_offset,
1699 "%s : Pip Tone (PT), %s",
1701 (value & 0x01) ? "notification is required" : "notification is not authorized or notification is not required");
1703 EXTRANEOUS_DATA_CHECK(len, 1);
1707 param_paca_ind(ASN1_SCK *asn1, proto_tree *tree, guint len)
1713 saved_offset = asn1->offset;
1715 asn1_int32_value_decode(asn1, 1, &value);
1717 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
1718 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1719 saved_offset, asn1->offset - saved_offset,
1723 switch ((value & 0x1e) >> 1)
1725 case 0: str = "Not used"; break;
1726 case 1: str = "Priority Level 1"; break;
1727 case 2: str = "Priority Level 2"; break;
1728 case 3: str = "Priority Level 3"; break;
1729 case 4: str = "Priority Level 4"; break;
1730 case 5: str = "Priority Level 5"; break;
1731 case 6: str = "Priority Level 6"; break;
1732 case 7: str = "Priority Level 7"; break;
1733 case 8: str = "Priority Level 8"; break;
1734 case 9: str = "Priority Level 9"; break;
1735 case 10: str = "Priority Level 10"; break;
1736 case 11: str = "Priority Level 11"; break;
1737 case 12: str = "Priority Level 12"; break;
1738 case 13: str = "Priority Level 13"; break;
1739 case 14: str = "Priority Level 14"; break;
1740 case 15: str = "Priority Level 15"; break;
1743 my_decode_bitfield_value(bigbuf, value, 0x1e, 8);
1744 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1745 saved_offset, asn1->offset - saved_offset,
1746 "%s : PACA Level, %s",
1750 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
1751 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1752 saved_offset, asn1->offset - saved_offset,
1753 "%s : PACA is %spermanently activated",
1755 (value & 0x01) ? "" : "not ");
1757 EXTRANEOUS_DATA_CHECK(len, 1);
1761 param_digit_collect_ctrl(ASN1_SCK *asn1, proto_tree *tree, guint len)
1766 proto_tree *subtree;
1768 saved_offset = asn1->offset;
1770 asn1_int32_value_decode(asn1, 1, &value);
1772 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
1773 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1774 saved_offset, asn1->offset - saved_offset,
1775 "%s : Break (BRK), %s",
1777 (value & 0x80) ? "Break In (default)" : "No Break");
1779 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
1780 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1781 saved_offset, asn1->offset - saved_offset,
1782 "%s : Type Ahead (TA), %s",
1784 (value & 0x40) ? "Buffer (default)" : "No Type Ahead");
1786 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
1787 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1788 saved_offset, asn1->offset - saved_offset,
1792 my_decode_bitfield_value(bigbuf, value, 0x1f, 8);
1793 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1794 saved_offset, asn1->offset - saved_offset,
1795 "%s : Maximum Collect (%d)",
1799 if (len == 1) return;
1801 saved_offset = asn1->offset;
1803 asn1_int32_value_decode(asn1, 1, &value);
1805 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
1806 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1807 saved_offset, asn1->offset - saved_offset,
1811 my_decode_bitfield_value(bigbuf, value, 0x1f, 8);
1812 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1813 saved_offset, asn1->offset - saved_offset,
1814 "%s : Minimum Collect (%d)",
1818 if (len == 2) return;
1820 saved_offset = asn1->offset;
1822 asn1_int32_value_decode(asn1, 1, &value);
1824 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1825 saved_offset, asn1->offset - saved_offset,
1826 "Maximum Interaction Time (%d) seconds",
1829 if (len == 3) return;
1831 saved_offset = asn1->offset;
1833 asn1_int32_value_decode(asn1, 1, &value);
1835 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
1836 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1837 saved_offset, asn1->offset - saved_offset,
1841 my_decode_bitfield_value(bigbuf, value, 0x1f, 8);
1842 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1843 saved_offset, asn1->offset - saved_offset,
1844 "%s : Initial Interdigit Time (%d) seconds",
1848 if (len == 4) return;
1850 saved_offset = asn1->offset;
1852 asn1_int32_value_decode(asn1, 1, &value);
1854 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
1855 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1856 saved_offset, asn1->offset - saved_offset,
1860 my_decode_bitfield_value(bigbuf, value, 0x1f, 8);
1861 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
1862 saved_offset, asn1->offset - saved_offset,
1863 "%s : Normal Interdigit Time (%d) seconds",
1867 if (len == 5) return;
1869 saved_offset = asn1->offset;
1872 proto_tree_add_text(tree, asn1->tvb,
1873 saved_offset, (len > 6) ? 2 : 1,
1874 "Clear Digits Digit Mask");
1876 subtree = proto_item_add_subtree(item, ett_clr_dig_mask);
1878 asn1_int32_value_decode(asn1, 1, &value);
1880 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
1881 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1882 saved_offset, asn1->offset - saved_offset,
1886 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
1887 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1888 saved_offset, asn1->offset - saved_offset,
1892 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
1893 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1894 saved_offset, asn1->offset - saved_offset,
1898 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
1899 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1900 saved_offset, asn1->offset - saved_offset,
1904 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
1905 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1906 saved_offset, asn1->offset - saved_offset,
1910 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
1911 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1912 saved_offset, asn1->offset - saved_offset,
1916 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
1917 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1918 saved_offset, asn1->offset - saved_offset,
1922 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
1923 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1924 saved_offset, asn1->offset - saved_offset,
1928 if (len == 6) return;
1930 saved_offset = asn1->offset;
1932 asn1_int32_value_decode(asn1, 1, &value);
1934 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
1935 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1936 saved_offset, asn1->offset - saved_offset,
1940 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
1941 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1942 saved_offset, asn1->offset - saved_offset,
1946 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
1947 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1948 saved_offset, asn1->offset - saved_offset,
1952 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
1953 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1954 saved_offset, asn1->offset - saved_offset,
1958 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
1959 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1960 saved_offset, asn1->offset - saved_offset,
1964 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
1965 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1966 saved_offset, asn1->offset - saved_offset,
1970 if (len == 7) return;
1972 saved_offset = asn1->offset;
1975 proto_tree_add_text(tree, asn1->tvb,
1976 saved_offset, (len > 8) ? 2 : 1,
1977 "Enter Digits Digit Mask");
1979 subtree = proto_item_add_subtree(item, ett_ent_dig_mask);
1981 asn1_int32_value_decode(asn1, 1, &value);
1983 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
1984 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1985 saved_offset, asn1->offset - saved_offset,
1989 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
1990 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1991 saved_offset, asn1->offset - saved_offset,
1995 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
1996 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
1997 saved_offset, asn1->offset - saved_offset,
2001 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
2002 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2003 saved_offset, asn1->offset - saved_offset,
2007 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
2008 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2009 saved_offset, asn1->offset - saved_offset,
2013 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
2014 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2015 saved_offset, asn1->offset - saved_offset,
2019 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
2020 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2021 saved_offset, asn1->offset - saved_offset,
2025 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
2026 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2027 saved_offset, asn1->offset - saved_offset,
2031 if (len == 8) return;
2033 saved_offset = asn1->offset;
2035 asn1_int32_value_decode(asn1, 1, &value);
2037 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
2038 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2039 saved_offset, asn1->offset - saved_offset,
2043 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
2044 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2045 saved_offset, asn1->offset - saved_offset,
2049 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
2050 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2051 saved_offset, asn1->offset - saved_offset,
2055 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
2056 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2057 saved_offset, asn1->offset - saved_offset,
2061 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
2062 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2063 saved_offset, asn1->offset - saved_offset,
2067 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
2068 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2069 saved_offset, asn1->offset - saved_offset,
2073 if (len == 9) return;
2075 saved_offset = asn1->offset;
2078 proto_tree_add_text(tree, asn1->tvb,
2079 saved_offset, (len > 10) ? 2 : 1,
2080 "Allowed Digits Digit Mask");
2082 subtree = proto_item_add_subtree(item, ett_all_dig_mask);
2084 asn1_int32_value_decode(asn1, 1, &value);
2086 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
2087 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2088 saved_offset, asn1->offset - saved_offset,
2092 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
2093 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2094 saved_offset, asn1->offset - saved_offset,
2098 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
2099 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2100 saved_offset, asn1->offset - saved_offset,
2104 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
2105 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2106 saved_offset, asn1->offset - saved_offset,
2110 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
2111 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2112 saved_offset, asn1->offset - saved_offset,
2116 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
2117 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2118 saved_offset, asn1->offset - saved_offset,
2122 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
2123 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2124 saved_offset, asn1->offset - saved_offset,
2128 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
2129 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2130 saved_offset, asn1->offset - saved_offset,
2134 if (len == 10) return;
2136 saved_offset = asn1->offset;
2138 asn1_int32_value_decode(asn1, 1, &value);
2140 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
2141 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2142 saved_offset, asn1->offset - saved_offset,
2146 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
2147 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2148 saved_offset, asn1->offset - saved_offset,
2152 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
2153 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2154 saved_offset, asn1->offset - saved_offset,
2158 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
2159 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2160 saved_offset, asn1->offset - saved_offset,
2164 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
2165 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2166 saved_offset, asn1->offset - saved_offset,
2170 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
2171 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
2172 saved_offset, asn1->offset - saved_offset,
2176 if (len == 11) return;
2178 saved_offset = asn1->offset;
2180 asn1_int32_value_decode(asn1, 1, &value);
2182 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
2183 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2184 saved_offset, asn1->offset - saved_offset,
2188 my_decode_bitfield_value(bigbuf, value, 0x1f, 8);
2189 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2190 saved_offset, asn1->offset - saved_offset,
2191 "%s : Special Interdigit Time (%d)",
2195 if (len == 12) return;
2197 saved_offset = asn1->offset;
2199 asn1_int32_value_decode(asn1, 1, &value);
2201 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
2202 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2203 saved_offset, asn1->offset - saved_offset,
2207 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
2208 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2209 saved_offset, asn1->offset - saved_offset,
2213 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
2214 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2215 saved_offset, asn1->offset - saved_offset,
2219 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
2220 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2221 saved_offset, asn1->offset - saved_offset,
2225 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
2226 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2227 saved_offset, asn1->offset - saved_offset,
2231 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
2232 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2233 saved_offset, asn1->offset - saved_offset,
2237 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
2238 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2239 saved_offset, asn1->offset - saved_offset,
2243 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
2244 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2245 saved_offset, asn1->offset - saved_offset,
2249 if (len == 13) return;
2251 saved_offset = asn1->offset;
2253 asn1_int32_value_decode(asn1, 1, &value);
2255 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
2256 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2257 saved_offset, asn1->offset - saved_offset,
2261 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
2262 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2263 saved_offset, asn1->offset - saved_offset,
2267 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
2268 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2269 saved_offset, asn1->offset - saved_offset,
2273 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
2274 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2275 saved_offset, asn1->offset - saved_offset,
2279 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
2280 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2281 saved_offset, asn1->offset - saved_offset,
2285 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
2286 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2287 saved_offset, asn1->offset - saved_offset,
2291 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
2292 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2293 saved_offset, asn1->offset - saved_offset,
2297 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
2298 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2299 saved_offset, asn1->offset - saved_offset,
2303 if (len == 14) return;
2305 saved_offset = asn1->offset;
2307 asn1_int32_value_decode(asn1, 1, &value);
2309 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
2310 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2311 saved_offset, asn1->offset - saved_offset,
2315 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
2316 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2317 saved_offset, asn1->offset - saved_offset,
2321 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
2322 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2323 saved_offset, asn1->offset - saved_offset,
2327 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
2328 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2329 saved_offset, asn1->offset - saved_offset,
2333 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
2334 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2335 saved_offset, asn1->offset - saved_offset,
2339 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
2340 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2341 saved_offset, asn1->offset - saved_offset,
2345 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
2346 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2347 saved_offset, asn1->offset - saved_offset,
2351 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
2352 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2353 saved_offset, asn1->offset - saved_offset,
2357 if (len == 15) return;
2359 saved_offset = asn1->offset;
2361 asn1_int32_value_decode(asn1, 1, &value);
2363 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
2364 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2365 saved_offset, asn1->offset - saved_offset,
2369 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
2370 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2371 saved_offset, asn1->offset - saved_offset,
2375 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
2376 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2377 saved_offset, asn1->offset - saved_offset,
2381 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
2382 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2383 saved_offset, asn1->offset - saved_offset,
2387 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
2388 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2389 saved_offset, asn1->offset - saved_offset,
2393 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
2394 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2395 saved_offset, asn1->offset - saved_offset,
2399 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
2400 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2401 saved_offset, asn1->offset - saved_offset,
2405 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
2406 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2407 saved_offset, asn1->offset - saved_offset,
2411 EXTRANEOUS_DATA_CHECK(len, 16);
2415 param_no_ans_time(ASN1_SCK *asn1, proto_tree *tree, guint len)
2420 saved_offset = asn1->offset;
2422 asn1_int32_value_decode(asn1, 1, &value);
2424 proto_tree_add_text(tree, asn1->tvb,
2425 saved_offset, asn1->offset - saved_offset,
2426 "(%d) The number of seconds to wait after alerting an MS or after seizing an outgoing trunk before applying no answer trigger treatment.",
2429 EXTRANEOUS_DATA_CHECK(len, 1);
2433 param_mw_noti_count(ASN1_SCK *asn1, proto_tree *tree, guint len)
2436 guint saved_offset, orig_offset;
2439 SHORT_DATA_CHECK(len, 2);
2441 orig_offset = asn1->offset;
2442 saved_offset = asn1->offset;
2446 asn1_int32_value_decode(asn1, 1, &value);
2450 case 0: str = "Voice Messages"; break;
2451 case 1: str = "Short Message Services (SMS) messages"; break;
2452 case 2: str = "Group 3 (G3) Fax messages"; break;
2453 case 255: str = "Not specified"; break;
2455 str = "Reserved, treat as Not specified";
2459 proto_tree_add_text(tree, asn1->tvb,
2460 saved_offset, asn1->offset - saved_offset,
2461 "Type of messages, %s",
2464 saved_offset = asn1->offset;
2466 asn1_int32_value_decode(asn1, 1, &value);
2470 case 0: str = "No messages are waiting"; break;
2471 case 254: str = "254 or more messages are waiting"; break;
2472 case 255: str = "An unknown number of messages are waiting (greater than zero)"; break;
2474 sprintf(bigbuf, "%d messages are waiting", value);
2479 proto_tree_add_text(tree, asn1->tvb,
2480 saved_offset, asn1->offset - saved_offset,
2483 saved_offset = asn1->offset;
2485 while ((len - (saved_offset - orig_offset)) >= 2);
2487 EXTRANEOUS_DATA_CHECK((len - (saved_offset - orig_offset)), 0);
2491 param_otfi(ASN1_SCK *asn1, proto_tree *tree, guint len)
2497 saved_offset = asn1->offset;
2499 asn1_int32_value_decode(asn1, 1, &value);
2501 switch ((value & 0xc0) >> 6)
2503 case 0: str = "Ignore"; break;
2504 case 1: str = "Presentation Allowed"; break;
2505 case 2: str = "Presentation Restricted"; break;
2506 case 3: str = "Reserved"; break;
2509 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
2510 proto_tree_add_text(tree, asn1->tvb,
2511 saved_offset, asn1->offset - saved_offset,
2512 "%s : Calling Number ID Restriction, %s",
2516 switch ((value & 0x30) >> 4)
2518 case 0: str = "Ignore"; break;
2519 case 1: str = "Pip Tone Inactive"; break;
2520 case 2: str = "Pip Tone Active"; break;
2521 case 3: str = "Reserved"; break;
2524 my_decode_bitfield_value(bigbuf, value, 0x30, 8);
2525 proto_tree_add_text(tree, asn1->tvb,
2526 saved_offset, asn1->offset - saved_offset,
2527 "%s : Message Waiting Notification, %s",
2531 switch ((value & 0x0c) >> 2)
2533 case 0: str = "Ignore"; break;
2534 case 1: str = "No CW"; break;
2535 case 2: str = "Normal CW"; break;
2536 case 3: str = "Priority CW"; break;
2539 my_decode_bitfield_value(bigbuf, value, 0x0c, 8);
2540 proto_tree_add_text(tree, asn1->tvb,
2541 saved_offset, asn1->offset - saved_offset,
2542 "%s : Call Waiting for Incoming Call (CWIC), %s",
2546 switch (value & 0x03)
2548 case 0: str = "Ignore"; break;
2549 case 1: str = "No CW"; break;
2550 case 2: str = "Normal CW"; break;
2551 case 3: str = "Priority CW"; break;
2554 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
2555 proto_tree_add_text(tree, asn1->tvb,
2556 saved_offset, asn1->offset - saved_offset,
2557 "%s : Call Waiting for Future Incoming Call (CWFI), %s",
2561 if (len == 1) return;
2563 saved_offset = asn1->offset;
2565 asn1_int32_value_decode(asn1, 1, &value);
2567 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
2568 proto_tree_add_text(tree, asn1->tvb,
2569 saved_offset, asn1->offset - saved_offset,
2573 switch ((value & 0x30) >> 4)
2575 case 0: str = "Ignore"; break;
2576 case 1: str = "Presentation Allowed"; break;
2577 case 2: str = "Presentation Restricted"; break;
2578 case 3: str = "Blocking Toggle"; break;
2581 my_decode_bitfield_value(bigbuf, value, 0x30, 8);
2582 proto_tree_add_text(tree, asn1->tvb,
2583 saved_offset, asn1->offset - saved_offset,
2584 "%s : Calling Name Restriction (CNAR), %s",
2588 switch ((value & 0x0c) >> 2)
2590 case 0: str = "Ignore"; break;
2591 case 1: str = "Flash Inactive"; break;
2592 case 2: str = "Flash Active"; break;
2593 case 3: str = "Reserved"; break;
2596 my_decode_bitfield_value(bigbuf, value, 0x0c, 8);
2597 proto_tree_add_text(tree, asn1->tvb,
2598 saved_offset, asn1->offset - saved_offset,
2599 "%s : Flash Privileges (Flash), %s",
2603 switch (value & 0x03)
2605 case 0: str = "Ignore"; break;
2606 case 1: str = "PACA Demand Inactive"; break;
2607 case 2: str = "PACA Demand Actived"; break;
2608 case 3: str = "Reserved"; break;
2611 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
2612 proto_tree_add_text(tree, asn1->tvb,
2613 saved_offset, asn1->offset - saved_offset,
2614 "%s : Priority Access and Channel Assignment (PACA), %s",
2618 EXTRANEOUS_DATA_CHECK(len, 2);
2623 * Authentication Response
2624 * Authentication Response Base Station
2625 * Authentication Response Unique Challenge
2628 param_auth_resp_all(ASN1_SCK *asn1, proto_tree *tree, guint len)
2633 EXACT_DATA_CHECK(len, 3);
2635 saved_offset = asn1->offset;
2637 asn1_int32_value_decode(asn1, 1, &value);
2639 my_decode_bitfield_value(bigbuf, value, 0xfc, 8);
2640 proto_tree_add_text(tree, asn1->tvb,
2641 saved_offset, asn1->offset - saved_offset,
2645 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
2646 proto_tree_add_text(tree, asn1->tvb,
2647 saved_offset, asn1->offset - saved_offset,
2648 "%s : Response (MSB)",
2651 saved_offset = asn1->offset;
2653 asn1_int32_value_decode(asn1, 1, &value);
2655 my_decode_bitfield_value(bigbuf, value, 0xff, 8);
2656 proto_tree_add_text(tree, asn1->tvb,
2657 saved_offset, asn1->offset - saved_offset,
2661 saved_offset = asn1->offset;
2663 asn1_int32_value_decode(asn1, 1, &value);
2665 my_decode_bitfield_value(bigbuf, value, 0xff, 8);
2666 proto_tree_add_text(tree, asn1->tvb,
2667 saved_offset, asn1->offset - saved_offset,
2668 "%s : Response (LSB)",
2673 param_sys_acc_data(ASN1_SCK *asn1, proto_tree *tree, guint len)
2678 EXACT_DATA_CHECK(len, 5);
2680 param_mscid(asn1, tree, 3);
2682 saved_offset = asn1->offset;
2683 asn1_int32_value_decode(asn1, 2, &value);
2685 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2686 saved_offset, asn1->offset - saved_offset,
2687 "Serving Cell ID %d",
2692 param_bill_id(ASN1_SCK *asn1, proto_tree *tree, guint len)
2694 gint32 id, segcount;
2698 EXACT_DATA_CHECK(len, 7);
2700 param_mscid(asn1, tree, 3);
2702 saved_offset = asn1->offset;
2703 asn1_int32_value_decode(asn1, 3, &id);
2705 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2706 saved_offset, asn1->offset - saved_offset,
2710 saved_offset = asn1->offset;
2711 asn1_int32_value_decode(asn1, 1, &segcount);
2713 if (segcount == 255) { str = "Unspecified"; }
2714 else if ((segcount >= 0) && (segcount <= 127)) { str = "Number of call segments"; }
2715 else if ((segcount >= 128) && (segcount < 255)) { str = "Not used in TIA/EIA-41"; }
2717 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2718 saved_offset, asn1->offset - saved_offset,
2719 "Segment Counter %d: %s",
2724 param_cdma_so(ASN1_SCK *asn1, proto_tree *tree, guint len)
2730 SHORT_DATA_CHECK(len, 2);
2732 saved_offset = asn1->offset;
2733 asn1_int32_value_decode(asn1, 2, &so);
2737 case 1: str = "Basic Variable Rate Voice Service (8 kbps)"; break;
2738 case 2: str = "Mobile Station Loopback (8 kbps)"; break;
2739 case 3: str = "Enhanced Variable Rate Voice Service (8 kbps)"; break;
2740 case 4: str = "Asynchronous Data Service (9.6 kbps)"; break;
2741 case 5: str = "Group 3 Facsimile (9.6 kbps)"; break;
2742 case 6: str = "Short Message Services (Rate Set 1)"; break;
2743 case 7: str = "Packet Data Service: Internet or ISO Protocol Stack (9.6 kbps)"; break;
2744 case 8: str = "Packet Data Service: CDPD Protocol Stack (9.6 kbps)"; break;
2745 case 9: str = "Mobile Station Loopback (13 kbps)"; break;
2746 case 10: str = "STU-III Transparent Service"; break;
2747 case 11: str = "STU-III Non-Transparent Service"; break;
2748 case 12: str = "Asynchronous Data Service (14.4 or 9.6 kbps)"; break;
2749 case 13: str = "Group 3 Facsimile (14.4 or 9.6 kbps)"; break;
2750 case 14: str = "Short Message Services (Rate Set 2)"; break;
2751 case 15: str = "Packet Data Service: Internet or ISO Protocol Stack (14.4 kbps)"; break;
2752 case 16: str = "Packet Data Service: CDPD Protocol Stack (14.4 kbps)"; break;
2753 case 17: str = "High Rate Voice Service (13 kbps)"; break;
2754 case 32768: str = "QCELP (13 kbps)"; break;
2755 case 18: str = "Over-the-Air Parameter Administration (Rate Set 1)"; break;
2756 case 19: str = "Over-the-Air Parameter Administration (Rate Set 2)"; break;
2757 case 20: str = "Group 3 Analog Facsimile (Rate Set 1)"; break;
2758 case 21: str = "Group 3 Analog Facsimile (Rate Set 2)"; break;
2759 case 22: str = "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS1 forward, RS1 reverse)"; break;
2760 case 23: str = "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS1 forward, RS2 reverse)"; break;
2761 case 24: str = "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS2 forward, RS1 reverse)"; break;
2762 case 25: str = "High Speed Packet Data Service: Internet or ISO Protocol Stack (RS2 forward, RS2 reverse)"; break;
2763 case 26: str = "High Speed Packet Data Service: CDPD Protocol Stack (RS1 forward, RS1 reverse)"; break;
2764 case 27: str = "High Speed Packet Data Service: CDPD Protocol Stack (RS1 forward, RS2 reverse)"; break;
2765 case 28: str = "High Speed Packet Data Service: CDPD Protocol Stack (RS2 forward, RS1 reverse)"; break;
2766 case 29: str = "High Speed Packet Data Service: CDPD Protocol Stack (RS2 forward, RS2 reverse)"; break;
2767 case 30: str = "Supplemental Channel Loopback Test for Rate Set 1"; break;
2768 case 31: str = "Supplemental Channel Loopback Test for Rate Set 2"; break;
2769 case 32: str = "Test Data Service Option (TDSO)"; break;
2770 case 33: str = "cdma2000 High Speed Packet Data Service, Internet or ISO Protocol Stack"; break;
2771 case 34: str = "cdma2000 High Speed Packet Data Service, CDPD Protocol Stack"; break;
2772 case 35: str = "Location Services, Rate Set 1 (9.6 kbps)"; break;
2773 case 36: str = "Location Services, Rate Set 2 (14.4 kbps)"; break;
2774 case 37: str = "ISDN Interworking Service (64 kbps)"; break;
2775 case 38: str = "GSM Voice"; break;
2776 case 39: str = "GSM Circuit Data"; break;
2777 case 40: str = "GSM Packet Data"; break;
2778 case 41: str = "GSM Short Message Service"; break;
2779 case 42: str = "None Reserved for MC-MAP standard service options"; break;
2780 case 54: str = "Markov Service Option (MSO)"; break;
2781 case 55: str = "Loopback Service Option (LSO)"; break;
2782 case 56: str = "Selectable Mode Vocoder"; break;
2783 case 57: str = "32 kbps Circuit Video Conferencing"; break;
2784 case 58: str = "64 kbps Circuit Video Conferencing"; break;
2785 case 59: str = "HRPD Accounting Records Identifier"; break;
2786 case 60: str = "Link Layer Assisted Robust Header Compression (LLA ROHC) - Header Removal"; break;
2787 case 61: str = "Link Layer Assisted Robust Header Compression (LLA ROHC) - Header Compression"; break;
2788 case 62: str = "- 4099 None Reserved for standard service options"; break;
2789 case 4100: str = "Asynchronous Data Service, Revision 1 (9.6 or 14.4 kbps)"; break;
2790 case 4101: str = "Group 3 Facsimile, Revision 1 (9.6 or 14.4 kbps)"; break;
2791 case 4102: str = "Reserved for standard service option"; break;
2792 case 4103: str = "Packet Data Service: Internet or ISO Protocol Stack, Revision 1 (9.6 or 14.4 kbps)"; break;
2793 case 4104: str = "Packet Data Service: CDPD Protocol Stack, Revision 1 (9.6 or 14.4 kbps)"; break;
2795 if ((so >= 4105) && (so <= 32767)) { str = "Reserved for standard service options"; }
2796 else if ((so >= 32769) && (so <= 32771)) { str = "Proprietary QUALCOMM Incorporated"; }
2797 else if ((so >= 32772) && (so <= 32775)) { str = "Proprietary OKI Telecom"; }
2798 else if ((so >= 32776) && (so <= 32779)) { str = "Proprietary Lucent Technologies"; }
2799 else if ((so >= 32780) && (so <=32783)) { str = "Nokia"; }
2800 else if ((so >= 32784) && (so <=32787)) { str = "NORTEL NETWORKS"; }
2801 else if ((so >= 32788) && (so <=32791)) { str = "Sony Electronics Inc."; }
2802 else if ((so >= 32792) && (so <=32795)) { str = "Motorola"; }
2803 else if ((so >= 32796) && (so <=32799)) { str = "QUALCOMM Incorporated"; }
2804 else if ((so >= 32800) && (so <=32803)) { str = "QUALCOMM Incorporated"; }
2805 else if ((so >= 32804) && (so <=32807)) { str = "QUALCOMM Incorporated"; }
2806 else if ((so >= 32808) && (so <=32811)) { str = "QUALCOMM Incorporated"; }
2807 else if ((so >= 32812) && (so <=32815)) { str = "Lucent Technologies"; }
2808 else if ((so >= 32816) && (so <=32819)) { str = "Denso International"; }
2809 else if ((so >= 32820) && (so <=32823)) { str = "Motorola"; }
2810 else if ((so >= 32824) && (so <=32827)) { str = "Denso International"; }
2811 else if ((so >= 32828) && (so <=32831)) { str = "Denso International"; }
2812 else if ((so >= 32832) && (so <=32835)) { str = "Denso International"; }
2813 else if ((so >= 32836) && (so <=32839)) { str = "NEC America"; }
2814 else if ((so >= 32840) && (so <=32843)) { str = "Samsung Electronics"; }
2815 else if ((so >= 32844) && (so <=32847)) { str = "Texas Instruments Incorporated"; }
2816 else if ((so >= 32848) && (so <=32851)) { str = "Toshiba Corporation"; }
2817 else if ((so >= 32852) && (so <=32855)) { str = "LG Electronics Inc."; }
2818 else if ((so >= 32856) && (so <=32859)) { str = "VIA Telecom Inc."; }
2819 else { str = "Reserved"; }
2823 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2824 saved_offset, asn1->offset - saved_offset,
2828 EXTRANEOUS_DATA_CHECK(len, 2);
2832 param_tdma_sc(ASN1_SCK *asn1, proto_tree *tree, guint len)
2838 saved_offset = asn1->offset;
2840 asn1_int32_value_decode(asn1, 1, &value);
2844 case 0: str = "Analog Speech Only"; break;
2845 case 1: str = "Digital Speech Only"; break;
2846 case 2: str = "Analog or Digital Speech, Analog Preferred"; break;
2847 case 3: str = "Analog or Digital Speech, Digital Preferred"; break;
2848 case 4: str = "Asynchronous Data"; break;
2849 case 5: str = "G3 Fax"; break;
2850 case 6: str = "Not Used (Service Rejected)"; break;
2851 case 7: str = "STU III (Secure Telephone Unit)"; break;
2853 str = "Reserved, treat as Analog Speech Only";
2857 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2858 saved_offset, asn1->offset - saved_offset,
2862 EXTRANEOUS_DATA_CHECK(len, 1);
2866 param_dmh_red_ind(ASN1_SCK *asn1, proto_tree *tree, guint len)
2872 EXACT_DATA_CHECK(len, 1);
2874 saved_offset = asn1->offset;
2876 asn1_int32_value_decode(asn1, 1, &redind);
2880 case 0: str = "Not used"; break;
2881 case 1: str = "Call Forwarding Unconditional (CFU)"; break;
2882 case 2: str = "Call Forwarding Busy (CFB)"; break;
2883 case 3: str = "Call Forwarding No Answer (CFNA)"; break;
2884 case 4: str = "Call Forwarding Other (CFO)"; break;
2885 case 5: str = "CD Unspecified"; break;
2886 case 6: str = "CD PSTN"; break;
2887 case 7: str = "CD Private"; break;
2888 case 8: str = "PSTN Tandem"; break;
2889 case 9: str = "Private Tandem"; break;
2890 case 10: str = "Busy"; break;
2891 case 11: str = "Inactive"; break;
2892 case 12: str = "Unassigned"; break;
2893 case 13: str = "Termination Denied"; break;
2894 case 14: str = "CD Failure"; break;
2895 case 15: str = "Explicit Call Transfer (ECT)"; break;
2896 case 16: str = "Mobile Access Hunting (MAH)"; break;
2897 case 17: str = "Flexible Alerting (FA)"; break;
2898 case 18: str = "Abandoned Call Leg"; break;
2899 case 19: str = "Password Call Acceptance (PCA) Call Refused"; break;
2900 case 20: str = "Selective Call Acceptance (SCA) Call Refused"; break;
2901 case 21: str = "Dialogue"; break;
2902 case 22: str = "Call Forwarding Default (CFD)"; break;
2903 case 23: str = "CD Local"; break;
2904 case 24: str = "Voice Mail Retrieval"; break;
2906 if ((redind >= 25) && (redind <= 127))
2908 str = "Reserved/Unknown";
2912 str = "Reserved for bilateral agreements";
2917 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2918 saved_offset, asn1->offset - saved_offset,
2924 param_cic(ASN1_SCK *asn1, proto_tree *tree, guint len)
2929 EXACT_DATA_CHECK(len, 2);
2931 saved_offset = asn1->offset;
2933 asn1_int32_value_decode(asn1, 1, &tg);
2934 asn1_int32_value_decode(asn1, 1, &mem);
2936 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2938 "Trunk Group %d Member %d",
2943 param_qic(ASN1_SCK *asn1, proto_tree *tree, guint len)
2949 EXACT_DATA_CHECK(len, 1);
2951 saved_offset = asn1->offset;
2953 asn1_int32_value_decode(asn1, 1, &qic);
2957 case 0: str = "Not used"; break;
2958 case 1: str = "No information"; break;
2959 case 2: str = "Validation only"; break;
2960 case 3: str = "Validation and profile"; break;
2961 case 4: str = "Profile only"; break;
2963 if ((qic >= 5) && (qic <= 223))
2965 str = "Reserved, treat as Validation and profile";
2969 str = "Reserved for extension, treat as Validation and profile";
2974 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
2975 saved_offset, asn1->offset - saved_offset,
2980 param_feat_result(ASN1_SCK *asn1, proto_tree *tree, guint len)
2986 EXACT_DATA_CHECK(len, 1);
2988 saved_offset = asn1->offset;
2990 asn1_int32_value_decode(asn1, 1, &value);
2994 case 0: str = "Not used"; break;
2995 case 1: str = "Unsuccessful"; break;
2996 case 2: str = "Successful"; break;
2998 if ((value >= 3) && (value <= 95)) { str = "Reserved, treat as Unsuccessful"; }
2999 else if ((value >= 96) && (value <= 127)) { str = "Reserved, treat as Unsuccessful"; }
3000 else if ((value >= 128) && (value <= 223)) { str = "Reserved, treat as Successful"; }
3001 else { str = "Reserved for protocol extension, treat as Successful"; }
3005 proto_tree_add_text(tree, asn1->tvb,
3006 saved_offset, asn1->offset - saved_offset,
3010 gchar *calling_feat_ind_str[] = {
3013 "Authorized but de-activated",
3014 "Authorized and activated"
3018 param_calling_feat_ind(ASN1_SCK *asn1, proto_tree *tree, guint len)
3023 SHORT_DATA_CHECK(len, 2);
3025 saved_offset = asn1->offset;
3027 asn1_int32_value_decode(asn1, 1, &value);
3029 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
3030 proto_tree_add_text(tree, asn1->tvb,
3031 saved_offset, asn1->offset - saved_offset,
3032 "%s : Call Waiting Feature Activity (CW-FA), %s",
3034 calling_feat_ind_str[(value & 0xc0) >> 6]);
3036 my_decode_bitfield_value(bigbuf, value, 0x30, 8);
3037 proto_tree_add_text(tree, asn1->tvb,
3038 saved_offset, asn1->offset - saved_offset,
3039 "%s : Call Forwarding No Answer Feature Activity (CFNA-FA), %s",
3041 calling_feat_ind_str[(value & 0x30) >> 4]);
3043 my_decode_bitfield_value(bigbuf, value, 0x0c, 8);
3044 proto_tree_add_text(tree, asn1->tvb,
3045 saved_offset, asn1->offset - saved_offset,
3046 "%s : Call Forwarding Busy Feature Activity (CFB-FA), %s",
3048 calling_feat_ind_str[(value & 0x0c) >> 2]);
3050 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
3051 proto_tree_add_text(tree, asn1->tvb,
3052 saved_offset, asn1->offset - saved_offset,
3053 "%s : Call Forwarding Unconditional Feature Activity (CFU-FA), %s",
3055 calling_feat_ind_str[value & 0x03]);
3057 saved_offset = asn1->offset;
3059 asn1_int32_value_decode(asn1, 1, &value);
3061 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
3062 proto_tree_add_text(tree, asn1->tvb,
3063 saved_offset, asn1->offset - saved_offset,
3064 "%s : Call Transfer Feature Activity (CT-FA), %s",
3066 calling_feat_ind_str[(value & 0xc0) >> 6]);
3068 my_decode_bitfield_value(bigbuf, value, 0x30, 8);
3069 proto_tree_add_text(tree, asn1->tvb,
3070 saved_offset, asn1->offset - saved_offset,
3071 "%s : Voice Privacy Feature Activity (VP-FA), %s",
3073 calling_feat_ind_str[(value & 0x30) >> 4]);
3075 my_decode_bitfield_value(bigbuf, value, 0x0c, 8);
3076 proto_tree_add_text(tree, asn1->tvb,
3077 saved_offset, asn1->offset - saved_offset,
3078 "%s : Call Delivery Feature Activity (CD-FA), %s",
3080 calling_feat_ind_str[(value & 0x0c) >> 2]);
3082 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
3083 proto_tree_add_text(tree, asn1->tvb,
3084 saved_offset, asn1->offset - saved_offset,
3085 "%s : Three-Way Calling Feature Activity (3WC-FA), %s",
3087 calling_feat_ind_str[value & 0x03]);
3089 if (len == 2) return;
3091 saved_offset = asn1->offset;
3093 asn1_int32_value_decode(asn1, 1, &value);
3095 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
3096 proto_tree_add_text(tree, asn1->tvb,
3097 saved_offset, asn1->offset - saved_offset,
3098 "%s : Calling Number ID Restriction Override Feature Activity (CNIROver-FA), %s",
3100 calling_feat_ind_str[(value & 0xc0) >> 6]);
3102 my_decode_bitfield_value(bigbuf, value, 0x30, 8);
3103 proto_tree_add_text(tree, asn1->tvb,
3104 saved_offset, asn1->offset - saved_offset,
3105 "%s : Calling Number ID Restriction Feature Activity (CNIR-FA), %s",
3107 calling_feat_ind_str[(value & 0x30) >> 4]);
3109 my_decode_bitfield_value(bigbuf, value, 0x0c, 8);
3110 proto_tree_add_text(tree, asn1->tvb,
3111 saved_offset, asn1->offset - saved_offset,
3112 "%s : Two number Calling Number ID Presentation Feature Activity (CNIP2-FA), %s",
3114 calling_feat_ind_str[(value & 0x0c) >> 2]);
3116 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
3117 proto_tree_add_text(tree, asn1->tvb,
3118 saved_offset, asn1->offset - saved_offset,
3119 "%s : One number Calling Number ID Presentation Feature Activity (CNIP1-FA), %s",
3121 calling_feat_ind_str[value & 0x03]);
3123 if (len == 3) return;
3125 saved_offset = asn1->offset;
3127 asn1_int32_value_decode(asn1, 1, &value);
3129 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
3130 proto_tree_add_text(tree, asn1->tvb,
3131 saved_offset, asn1->offset - saved_offset,
3132 "%s : USCF divert to voice mail Feature Activity (USCFvm-FA), %s",
3134 calling_feat_ind_str[(value & 0xc0) >> 6]);
3136 my_decode_bitfield_value(bigbuf, value, 0x30, 8);
3137 proto_tree_add_text(tree, asn1->tvb,
3138 saved_offset, asn1->offset - saved_offset,
3139 "%s : Answer Hold Feature Activity (AH-FA), %s",
3141 calling_feat_ind_str[(value & 0x30) >> 4]);
3143 my_decode_bitfield_value(bigbuf, value, 0x0c, 8);
3144 proto_tree_add_text(tree, asn1->tvb,
3145 saved_offset, asn1->offset - saved_offset,
3146 "%s : Data Privacy Feature Activity (DP-FA), %s",
3148 calling_feat_ind_str[(value & 0x0c) >> 2]);
3150 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
3151 proto_tree_add_text(tree, asn1->tvb,
3152 saved_offset, asn1->offset - saved_offset,
3153 "%s : Priority Call Waiting Feature Activity (PCW-FA), %s",
3155 calling_feat_ind_str[value & 0x03]);
3157 if (len == 4) return;
3159 saved_offset = asn1->offset;
3161 asn1_int32_value_decode(asn1, 1, &value);
3163 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
3164 proto_tree_add_text(tree, asn1->tvb,
3165 saved_offset, asn1->offset - saved_offset,
3166 "%s : CDMA-Concurrent Service Feature Activity (CCS-FA), %s",
3168 calling_feat_ind_str[(value & 0xc0) >> 6]);
3170 my_decode_bitfield_value(bigbuf, value, 0x30, 8);
3171 proto_tree_add_text(tree, asn1->tvb,
3172 saved_offset, asn1->offset - saved_offset,
3173 "%s : CDMA-Packet Data Service Feature Activity (CPDS-FA), %s",
3175 calling_feat_ind_str[(value & 0x30) >> 4]);
3177 my_decode_bitfield_value(bigbuf, value, 0x0c, 8);
3178 proto_tree_add_text(tree, asn1->tvb,
3179 saved_offset, asn1->offset - saved_offset,
3180 "%s : USCF divert to network registered DN Feature Activity (USCFnr-FA), %s",
3182 calling_feat_ind_str[(value & 0x0c) >> 2]);
3184 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
3185 proto_tree_add_text(tree, asn1->tvb,
3186 saved_offset, asn1->offset - saved_offset,
3187 "%s : USCF divert to mobile station provided DN Feature Activity (USCFms-FA), %s",
3189 calling_feat_ind_str[value & 0x03]);
3191 if (len == 5) return;
3193 saved_offset = asn1->offset;
3195 asn1_int32_value_decode(asn1, 1, &value);
3197 my_decode_bitfield_value(bigbuf, value, 0xfc, 8);
3198 proto_tree_add_text(tree, asn1->tvb,
3199 saved_offset, asn1->offset - saved_offset,
3203 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
3204 proto_tree_add_text(tree, asn1->tvb,
3205 saved_offset, asn1->offset - saved_offset,
3206 "%s : TDMA Enhanced Privacy and Encryption Feature Activity (TDMA EPE-FA), %s",
3208 calling_feat_ind_str[value & 0x03]);
3210 EXTRANEOUS_DATA_CHECK(len, 6);
3214 param_usage_ind(ASN1_SCK *asn1, proto_tree *tree, guint len)
3220 EXACT_DATA_CHECK(len, 1);
3222 saved_offset = asn1->offset;
3224 asn1_int32_value_decode(asn1, 1, &value);
3228 case 0: str = "Unspecified"; break;
3229 case 1: str = "Sent-paid call"; break;
3230 case 2: str = "3rd number bill"; break;
3232 str = "Reserved, treat as Unspecified";
3236 proto_tree_add_text(tree, asn1->tvb,
3237 saved_offset, asn1->offset - saved_offset,
3243 gchar *tdma_data_feat_ind_str[] = {
3246 "Authorized but de-activated",
3247 "Authorized and activated"
3251 param_tdma_data_feat_ind(ASN1_SCK *asn1, proto_tree *tree, guint len)
3256 SHORT_DATA_CHECK(len, 2);
3258 saved_offset = asn1->offset;
3260 asn1_int32_value_decode(asn1, 1, &value);
3262 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
3263 proto_tree_add_text(tree, asn1->tvb,
3264 saved_offset, asn1->offset - saved_offset,
3268 my_decode_bitfield_value(bigbuf, value, 0x30, 8);
3269 proto_tree_add_text(tree, asn1->tvb,
3270 saved_offset, asn1->offset - saved_offset,
3271 "%s : STU-III Feature Activity (STUIII-FA), %s",
3273 tdma_data_feat_ind_str[(value & 0x30) >> 4]);
3275 my_decode_bitfield_value(bigbuf, value, 0x0c, 8);
3276 proto_tree_add_text(tree, asn1->tvb,
3277 saved_offset, asn1->offset - saved_offset,
3278 "%s : G3 Fax Feature Activity (G3FAX-FA), %s",
3280 tdma_data_feat_ind_str[(value & 0x0c) >> 2]);
3282 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
3283 proto_tree_add_text(tree, asn1->tvb,
3284 saved_offset, asn1->offset - saved_offset,
3285 "%s : ADS Feature Activity (ADS-FA), %s",
3287 tdma_data_feat_ind_str[value & 0x03]);
3289 saved_offset = asn1->offset;
3291 asn1_int32_value_decode(asn1, 1, &value);
3293 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
3294 proto_tree_add_text(tree, asn1->tvb,
3295 saved_offset, asn1->offset - saved_offset,
3296 "%s : Triple Rate data Feature Activity (3RATE-FA), %s",
3298 tdma_data_feat_ind_str[(value & 0xc0) >> 6]);
3300 my_decode_bitfield_value(bigbuf, value, 0x30, 8);
3301 proto_tree_add_text(tree, asn1->tvb,
3302 saved_offset, asn1->offset - saved_offset,
3303 "%s : Double Rate data Feature Activity (2RATE-FA), %s",
3305 tdma_data_feat_ind_str[(value & 0x30) >> 4]);
3307 my_decode_bitfield_value(bigbuf, value, 0x0c, 8);
3308 proto_tree_add_text(tree, asn1->tvb,
3309 saved_offset, asn1->offset - saved_offset,
3310 "%s : Full Rate data Feature Activity (FRATE-FA), %s",
3312 tdma_data_feat_ind_str[(value & 0x0c) >> 2]);
3314 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
3315 proto_tree_add_text(tree, asn1->tvb,
3316 saved_offset, asn1->offset - saved_offset,
3317 "%s : Half Rate data Feature Activity (HRATE-FA), %s",
3319 tdma_data_feat_ind_str[value & 0x03]);
3321 EXTRANEOUS_DATA_CHECK(len, 2);
3325 param_faulty(ASN1_SCK *asn1, proto_tree *tree, guint len)
3332 saved_offset = asn1->offset;
3333 asn1_int32_value_decode(asn1, 1, &value);
3335 str = my_match_strval((guint32) value, ansi_param_1_strings, &idx);
3341 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
3343 "Unrecognized parameter ID");
3347 asn1->offset = saved_offset;
3348 asn1_uint32_value_decode(asn1, 2, &value);
3350 str = my_match_strval((guint32) value, ansi_param_2_strings, &idx);
3356 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
3358 "Unrecognized parameter ID");
3362 asn1->offset = saved_offset;
3363 asn1_int32_value_decode(asn1, 3, &value);
3365 str = my_match_strval((guint32) value, ansi_param_3_strings, &idx);
3369 if (((value >= 0x9FFF00) && (value <= 0x9FFF7F)) ||
3370 ((value >= 0xBFFF00) && (value <= 0xBFFF7F)))
3372 str = "Reserved for protocol extension";
3374 else if (((value >= 0x9FFE76) && (value <= 0x9FFE7F)) ||
3375 ((value >= 0xBFFE76) && (value <= 0xBFFE7F)))
3377 str = "Reserved for National Network Use";
3381 str = "Unrecognized parameter ID";
3387 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
3388 saved_offset, asn1->offset - saved_offset,
3391 EXTRANEOUS_DATA_CHECK(len, asn1->offset - saved_offset);
3395 param_sys_type_code(ASN1_SCK *asn1, proto_tree *tree, guint len)
3397 gint32 sys_type_code;
3401 EXACT_DATA_CHECK(len, 1);
3403 saved_offset = asn1->offset;
3405 asn1_int32_value_decode(asn1, 1, &sys_type_code);
3407 switch (sys_type_code)
3409 case 0: str = "Not used"; break;
3410 case 1: str = "EDS"; break;
3411 case 2: str = "Astronet"; break;
3412 case 3: str = "Lucent Technologies"; break;
3413 case 4: str = "Ericsson"; break;
3414 case 5: str = "GTE"; break;
3415 case 6: str = "Motorola"; break;
3416 case 7: str = "NEC"; break;
3417 case 8: str = "NORTEL"; break;
3418 case 9: str = "NovAtel"; break;
3419 case 10: str = "Plexsys"; break;
3420 case 11: str = "Digital Equipment Corp"; break;
3421 case 12: str = "INET"; break;
3422 case 13: str = "Bellcore"; break;
3423 case 14: str = "Alcatel SEL"; break;
3424 case 15: str = "Compaq (Tandem)"; break;
3425 case 16: str = "QUALCOMM"; break;
3426 case 17: str = "Aldiscon"; break;
3427 case 18: str = "Celcore"; break;
3428 case 19: str = "TELOS"; break;
3429 case 20: str = "ADI Limited (Stanilite)"; break;
3430 case 21: str = "Coral Systems"; break;
3431 case 22: str = "Synacom Technology"; break;
3432 case 23: str = "DSC"; break;
3433 case 24: str = "MCI"; break;
3434 case 25: str = "NewNet"; break;
3435 case 26: str = "Sema Group Telecoms"; break;
3436 case 27: str = "LG Information and Communications"; break;
3437 case 28: str = "CBIS"; break;
3438 case 29: str = "Siemens"; break;
3439 case 30: str = "Samsung Electronics"; break;
3440 case 31: str = "ReadyCom Inc."; break;
3441 case 32: str = "AG Communication Systems"; break;
3442 case 33: str = "Hughes Network Systems"; break;
3443 case 34: str = "Phoenix Wireless Group"; break;
3445 str = "Reserved/Unknown";
3449 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
3450 saved_offset, asn1->offset - saved_offset,
3451 "Vendor ID (%d) %s",
3452 sys_type_code, str);
3456 param_ext_sys_type_code(ASN1_SCK *asn1, proto_tree *tree, guint len)
3462 EXACT_DATA_CHECK(len, 2);
3464 saved_offset = asn1->offset;
3466 asn1_int32_value_decode(asn1, 1, &type);
3470 case 0: str = "Not specified"; break;
3471 case 1: str = "Serving MSC"; break;
3472 case 2: str = "Home MSC"; break;
3473 case 3: str = "Gateway MSC"; break;
3474 case 4: str = "HLR"; break;
3475 case 5: str = "VLR"; break;
3476 case 6: str = "EIR (reserved)"; break;
3477 case 7: str = "AC"; break;
3478 case 8: str = "Border MSC"; break;
3479 case 9: str = "Originating MSC"; break;
3481 if ((type >= 10) && (type <= 223)) { str = "Reserved, treat as Not specified"; }
3482 else { str = "Reserved for protocol extension, treat as Not specified"; }
3486 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
3487 saved_offset, asn1->offset - saved_offset,
3492 param_sys_type_code(asn1, tree, len-1);
3496 param_cdma_sea_win(ASN1_SCK *asn1, proto_tree *tree, guint len)
3501 EXACT_DATA_CHECK(len, 1);
3503 saved_offset = asn1->offset;
3505 asn1_int32_value_decode(asn1, 1, &value);
3507 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
3508 proto_tree_add_text(tree, asn1->tvb,
3509 saved_offset, asn1->offset - saved_offset,
3513 my_decode_bitfield_value(bigbuf, value, 0x0f, 8);
3514 proto_tree_add_text(tree, asn1->tvb,
3515 saved_offset, asn1->offset - saved_offset,
3522 param_cdma_sea_param(ASN1_SCK *asn1, proto_tree *tree, guint len)
3527 SHORT_DATA_CHECK(len, 4);
3529 saved_offset = asn1->offset;
3531 asn1_int32_value_decode(asn1, 1, &value);
3533 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
3534 proto_tree_add_text(tree, asn1->tvb,
3535 saved_offset, asn1->offset - saved_offset,
3539 my_decode_bitfield_value(bigbuf, value, 0x0f, 8);
3540 proto_tree_add_text(tree, asn1->tvb,
3541 saved_offset, asn1->offset - saved_offset,
3542 "%s : CDMA Search Window, %d",
3546 saved_offset = asn1->offset;
3548 asn1_int32_value_decode(asn1, 1, &value);
3550 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
3551 proto_tree_add_text(tree, asn1->tvb,
3552 saved_offset, asn1->offset - saved_offset,
3556 my_decode_bitfield_value(bigbuf, value, 0x3f, 8);
3557 proto_tree_add_text(tree, asn1->tvb,
3558 saved_offset, asn1->offset - saved_offset,
3563 saved_offset = asn1->offset;
3565 asn1_int32_value_decode(asn1, 1, &value);
3567 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
3568 proto_tree_add_text(tree, asn1->tvb,
3569 saved_offset, asn1->offset - saved_offset,
3573 my_decode_bitfield_value(bigbuf, value, 0x3f, 8);
3574 proto_tree_add_text(tree, asn1->tvb,
3575 saved_offset, asn1->offset - saved_offset,
3580 saved_offset = asn1->offset;
3582 asn1_int32_value_decode(asn1, 1, &value);
3584 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
3585 proto_tree_add_text(tree, asn1->tvb,
3586 saved_offset, asn1->offset - saved_offset,
3591 my_decode_bitfield_value(bigbuf, value, 0x0f, 8);
3592 proto_tree_add_text(tree, asn1->tvb,
3593 saved_offset, asn1->offset - saved_offset,
3598 EXTRANEOUS_DATA_CHECK(len, 4);
3602 param_cdma_code_chan(ASN1_SCK *asn1, proto_tree *tree, guint len)
3607 saved_offset = asn1->offset;
3609 asn1_int32_value_decode(asn1, 1, &value);
3611 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
3612 proto_tree_add_text(tree, asn1->tvb,
3613 saved_offset, asn1->offset - saved_offset,
3617 my_decode_bitfield_value(bigbuf, value, 0x3f, 8);
3618 proto_tree_add_text(tree, asn1->tvb,
3619 saved_offset, asn1->offset - saved_offset,
3620 "%s : CDMA Code Channel %d",
3624 EXTRANEOUS_DATA_CHECK(len, 1);
3628 param_chan_data(ASN1_SCK *asn1, proto_tree *tree, guint len)
3634 SHORT_DATA_CHECK(len, 3);
3636 saved_offset = asn1->offset;
3638 asn1_int32_value_decode(asn1, 1, &value);
3640 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
3641 proto_tree_add_text(tree, asn1->tvb,
3642 saved_offset, asn1->offset - saved_offset,
3643 "%s : SAT Color Code %d",
3645 (value & 0xc0 >> 6));
3647 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
3648 proto_tree_add_text(tree, asn1->tvb,
3649 saved_offset, asn1->offset - saved_offset,
3651 (value & 0x20) ? "Reserved" : "Analog Band Class",
3654 switch ((value & 0x18) >> 3)
3656 case 0: str = "DTX disabled (not active/acceptable)"; break;
3657 case 1: str = "Reserved, treat as DTX disabled"; break;
3658 case 2: str = "DTX-low mode (i.e., 8 dB below DTX active/acceptable)"; break;
3659 case 3: str = "DTX mode active or acceptable"; break;
3662 my_decode_bitfield_value(bigbuf, value, 0x18, 8);
3663 proto_tree_add_text(tree, asn1->tvb,
3664 saved_offset, asn1->offset - saved_offset,
3669 my_decode_bitfield_value(bigbuf, value, 0x07, 8);
3670 proto_tree_add_text(tree, asn1->tvb,
3671 saved_offset, asn1->offset - saved_offset,
3672 "%s : Voice Mobile Attenuation Code (VMAC) %d",
3676 saved_offset = asn1->offset;
3678 asn1_int32_value_decode(asn1, 2, &value);
3680 proto_tree_add_text(tree, asn1->tvb,
3681 saved_offset, asn1->offset - saved_offset,
3682 "Channel Number %d",
3685 EXTRANEOUS_DATA_CHECK(len, 3);
3689 param_cdma_plcm(ASN1_SCK *asn1, proto_tree *tree, guint len)
3694 EXACT_DATA_CHECK(len, 6);
3696 saved_offset = asn1->offset;
3698 asn1_int32_value_decode(asn1, 1, &value);
3700 my_decode_bitfield_value(bigbuf, value, 0xfc, 8);
3701 proto_tree_add_text(tree, asn1->tvb,
3702 saved_offset, asn1->offset - saved_offset,
3706 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
3707 proto_tree_add_text(tree, asn1->tvb,
3708 saved_offset, asn1->offset - saved_offset,
3709 "%s : CDMA Private Long Code Mask (PLCM) (MSB)",
3712 saved_offset = asn1->offset;
3714 proto_tree_add_text(tree, asn1->tvb,
3715 saved_offset, len - 1,
3716 "CDMA Private Long Code Mask (PLCM)");
3718 asn1->offset += (len - 1);
3722 param_ctrl_chan_data(ASN1_SCK *asn1, proto_tree *tree, guint len)
3727 EXACT_DATA_CHECK(len, 4);
3729 saved_offset = asn1->offset;
3731 asn1_int32_value_decode(asn1, 1, &value);
3733 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
3734 proto_tree_add_text(tree, asn1->tvb,
3735 saved_offset, asn1->offset - saved_offset,
3736 "%s : Digital Color Code (DCC)",
3739 my_decode_bitfield_value(bigbuf, value, 0x38, 8);
3740 proto_tree_add_text(tree, asn1->tvb,
3741 saved_offset, asn1->offset - saved_offset,
3745 my_decode_bitfield_value(bigbuf, value, 0x07, 8);
3746 proto_tree_add_text(tree, asn1->tvb,
3747 saved_offset, asn1->offset - saved_offset,
3748 "%s : Control Mobile Attenuation Code (CMAC)",
3751 saved_offset = asn1->offset;
3753 asn1_int32_value_decode(asn1, 2, &value);
3755 proto_tree_add_text(tree, asn1->tvb,
3756 saved_offset, asn1->offset - saved_offset,
3757 "Channel Number (CHNO), %d",
3760 saved_offset = asn1->offset;
3762 asn1_int32_value_decode(asn1, 1, &value);
3764 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
3765 proto_tree_add_text(tree, asn1->tvb,
3766 saved_offset, asn1->offset - saved_offset,
3770 my_decode_bitfield_value(bigbuf, value, 0x0c, 8);
3771 proto_tree_add_text(tree, asn1->tvb,
3772 saved_offset, asn1->offset - saved_offset,
3773 "%s : Supplementary Digital Color Codes (SDCC1)",
3776 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
3777 proto_tree_add_text(tree, asn1->tvb,
3778 saved_offset, asn1->offset - saved_offset,
3779 "%s : Supplementary Digital Color Codes (SDCC2)",
3784 param_cdma_chan_data(ASN1_SCK *asn1, proto_tree *tree, guint len)
3786 gint32 value, temp_int;
3790 SHORT_DATA_CHECK(len, 8);
3792 saved_offset = asn1->offset;
3794 asn1_int32_value_decode(asn1, 2, &value);
3796 my_decode_bitfield_value(bigbuf, value >> 8, 0x80, 8);
3797 proto_tree_add_text(tree, asn1->tvb,
3802 my_decode_bitfield_value(bigbuf, value >> 8, 0x78, 8);
3803 proto_tree_add_text(tree, asn1->tvb,
3805 "%s : Frame Offset (%d), %.2f ms",
3807 (value & 0x7800) >> 11,
3808 ((value & 0x7800) >> 11) * 1.25);
3810 my_decode_bitfield_value(bigbuf, value >> 8, 0x07, 8);
3811 proto_tree_add_text(tree, asn1->tvb,
3813 "%s : CDMA Channel Number (MSB), %d",
3817 my_decode_bitfield_value(bigbuf, value & 0x00ff, 0xff, 8);
3818 proto_tree_add_text(tree, asn1->tvb,
3820 "%s : CDMA Channel Number (LSB)",
3823 saved_offset = asn1->offset;
3825 asn1_int32_value_decode(asn1, 1, &value);
3827 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
3828 proto_tree_add_text(tree, asn1->tvb,
3829 saved_offset, asn1->offset - saved_offset,
3833 temp_int = (value & 0x7c) >> 2;
3834 if ((temp_int < 0) || (temp_int >= (gint) NUM_BAND_CLASS_STR))
3840 str = band_class_str[temp_int];
3843 my_decode_bitfield_value(bigbuf, value, 0x7c, 8);
3844 proto_tree_add_text(tree, asn1->tvb,
3845 saved_offset, asn1->offset - saved_offset,
3846 "%s : Band Class, %s",
3850 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
3851 proto_tree_add_text(tree, asn1->tvb,
3852 saved_offset, asn1->offset - saved_offset,
3853 "%s : Long Code Mask (MSB)",
3856 asn1_int32_value_decode(asn1, 1, &value);
3858 my_decode_bitfield_value(bigbuf, value, 0xff, 8);
3859 proto_tree_add_text(tree, asn1->tvb,
3860 saved_offset + 1, 1,
3861 "%s : Long Code Mask",
3864 asn1_int32_value_decode(asn1, 1, &value);
3866 my_decode_bitfield_value(bigbuf, value, 0xff, 8);
3867 proto_tree_add_text(tree, asn1->tvb,
3868 saved_offset + 2, 1,
3869 "%s : Long Code Mask",
3872 asn1_int32_value_decode(asn1, 1, &value);
3874 my_decode_bitfield_value(bigbuf, value, 0xff, 8);
3875 proto_tree_add_text(tree, asn1->tvb,
3876 saved_offset + 3, 1,
3877 "%s : Long Code Mask",
3880 asn1_int32_value_decode(asn1, 1, &value);
3882 my_decode_bitfield_value(bigbuf, value, 0xff, 8);
3883 proto_tree_add_text(tree, asn1->tvb,
3884 saved_offset + 4, 1,
3885 "%s : Long Code Mask",
3888 asn1_int32_value_decode(asn1, 1, &value);
3890 my_decode_bitfield_value(bigbuf, value, 0xff, 8);
3891 proto_tree_add_text(tree, asn1->tvb,
3892 saved_offset + 5, 1,
3893 "%s : Long Code Mask (LSB)",
3896 if (len == 8) return;
3898 saved_offset = asn1->offset;
3900 asn1_int32_value_decode(asn1, 1, &value);
3902 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
3903 proto_tree_add_text(tree, asn1->tvb,
3904 saved_offset, asn1->offset - saved_offset,
3905 "%s : NP Extension",
3908 my_decode_bitfield_value(bigbuf, value, 0x78, 8);
3909 proto_tree_add_text(tree, asn1->tvb,
3910 saved_offset, asn1->offset - saved_offset,
3911 "%s : Nominal Power, %d",
3913 (value & 0x78) >> 3);
3915 my_decode_bitfield_value(bigbuf, value, 0x07, 8);
3916 proto_tree_add_text(tree, asn1->tvb,
3917 saved_offset, asn1->offset - saved_offset,
3918 "%s : Number Preamble, %d",
3922 if (len == 9) return;
3924 saved_offset = asn1->offset;
3926 asn1_int32_value_decode(asn1, 1, &value);
3928 proto_tree_add_text(tree, asn1->tvb,
3929 saved_offset, asn1->offset - saved_offset,
3930 "Base Station Protocol Revision, %d",
3933 EXTRANEOUS_DATA_CHECK(len, 10);
3937 param_namps_chan_data(ASN1_SCK *asn1, proto_tree *tree, guint len)
3943 saved_offset = asn1->offset;
3945 asn1_int32_value_decode(asn1, 1, &value);
3947 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
3948 proto_tree_add_text(tree, asn1->tvb,
3949 saved_offset, asn1->offset - saved_offset,
3953 switch ((value & 0x1c) >> 2)
3955 case 0: str = "Channel Data parameter SCC field applies"; break;
3956 case 1: str = "Digital SAT Color Code 1 (ignore SCC field)"; break;
3957 case 2: str = "Digital SAT Color Code 2 (ignore SCC field)"; break;
3958 case 3: str = "Digital SAT Color Code 3 (ignore SCC field)"; break;
3959 case 4: str = "Digital SAT Color Code 4 (ignore SCC field)"; break;
3960 case 5: str = "Digital SAT Color Code 5 (ignore SCC field)"; break;
3961 case 6: str = "Digital SAT Color Code 6 (ignore SCC field)"; break;
3962 case 7: str = "Digital SAT Color Code 7 (ignore SCC field)"; break;
3965 my_decode_bitfield_value(bigbuf, value, 0x1c, 8);
3966 proto_tree_add_text(tree, asn1->tvb,
3967 saved_offset, asn1->offset - saved_offset,
3968 "%s : Color Code Indicator (CCIndicator), %s",
3972 switch (value & 0x03)
3974 case 0: str = "Wide. 30 kHz AMPS voice channel"; break;
3975 case 1: str = "Upper. 10 kHz NAMPS voice channel"; break;
3976 case 2: str = "Middle. 10 kHz NAMPS voice channel"; break;
3977 case 3: str = "Lower. 10 kHz NAMPS voice channel"; break;
3980 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
3981 proto_tree_add_text(tree, asn1->tvb,
3982 saved_offset, asn1->offset - saved_offset,
3983 "%s : Narrow Analog Voice Channel Assignment (NAVCA), %s",
3987 EXTRANEOUS_DATA_CHECK(len, 1);
3991 param_cdma_ms_meas_chan_id(ASN1_SCK *asn1, proto_tree *tree, guint len)
3993 gint32 value, temp_int;
3997 SHORT_DATA_CHECK(len, 2);
3999 saved_offset = asn1->offset;
4001 asn1_int32_value_decode(asn1, 2, &value);
4003 temp_int = (value & 0xf800) >> 11;
4004 if ((temp_int < 0) || (temp_int >= (gint) NUM_BAND_CLASS_STR))
4010 str = band_class_str[temp_int];
4013 my_decode_bitfield_value(bigbuf, value >> 8, 0xf8, 8);
4014 proto_tree_add_text(tree, asn1->tvb,
4016 "%s : Band Class, %s",
4020 my_decode_bitfield_value(bigbuf, value >> 8, 0x07, 8);
4021 proto_tree_add_text(tree, asn1->tvb,
4023 "%s : CDMA Channel Number (MSB), %d",
4027 my_decode_bitfield_value(bigbuf, value & 0x00ff, 0xff, 8);
4028 proto_tree_add_text(tree, asn1->tvb,
4030 "%s : CDMA Channel Number (LSB)",
4033 EXTRANEOUS_DATA_CHECK(len, 2);
4037 param_tdma_chan_data(ASN1_SCK *asn1, proto_tree *tree, guint len)
4043 SHORT_DATA_CHECK(len, 5);
4045 saved_offset = asn1->offset;
4047 asn1_int32_value_decode(asn1, 1, &value);
4049 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
4050 proto_tree_add_text(tree, asn1->tvb,
4051 saved_offset, asn1->offset - saved_offset,
4055 switch (value & 0x1f)
4057 case 0: str = "Analog (not used if ChannelData is present)"; break;
4058 case 1: str = "Assigned to timeslot 1, full rate"; break;
4059 case 2: str = "Assigned to timeslot 2, full rate"; break;
4060 case 3: str = "Assigned to timeslot 3, full rate"; break;
4061 case 4: str = "Assigned to timeslots 1, 4 and 2, 5 Double rate"; break;
4062 case 5: str = "Assigned to timeslots 1, 4 and 3, 6 Double rate"; break;
4063 case 6: str = "Assigned to timeslots 2, 5 and 3, 6 Double rate"; break;
4064 case 9: str = "Assigned to timeslot 1, half rate"; break;
4065 case 10: str = "Assigned to timeslot 2, half rate"; break;
4066 case 11: str = "Assigned to timeslot 3, half rate"; break;
4067 case 12: str = "Assigned to timeslot 4, half rate"; break;
4068 case 13: str = "Assigned to timeslot 5, half rate"; break;
4069 case 14: str = "Assigned to timeslot 6, half rate"; break;
4070 case 15: str = "Assigned to timeslot 1, 2, 3, 4, 5, 6 Triple rate"; break;
4072 str = "Reserved, treat as Analog";
4076 my_decode_bitfield_value(bigbuf, value, 0x1f, 8);
4077 proto_tree_add_text(tree, asn1->tvb,
4078 saved_offset, asn1->offset - saved_offset,
4079 "%s : Time Slot and Rate indicator (TSR), %s",
4083 saved_offset = asn1->offset;
4085 asn1_int32_value_decode(asn1, 1, &value);
4087 proto_tree_add_text(tree, asn1->tvb,
4088 saved_offset, asn1->offset - saved_offset,
4089 "Digital Verification Color Code (DVCC) %d",
4092 saved_offset = asn1->offset;
4094 asn1_int32_value_decode(asn1, 1, &value);
4096 switch ((value & 0xf0) >> 4)
4098 case 0: str = "800 MHz"; break;
4099 case 1: str = "1800 MHz"; break;
4101 str = "Reserved, treat as 800 MHz";
4105 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
4106 proto_tree_add_text(tree, asn1->tvb,
4107 saved_offset, asn1->offset - saved_offset,
4108 "%s : Hyper Band, %s",
4112 my_decode_bitfield_value(bigbuf, value, 0x0f, 8);
4113 proto_tree_add_text(tree, asn1->tvb,
4114 saved_offset, asn1->offset - saved_offset,
4115 "%s : Digital Mobile Attenuation Code (DMAC) %d",
4119 saved_offset = asn1->offset;
4121 asn1_int32_value_decode(asn1, 2, &value);
4123 my_decode_bitfield_value(bigbuf, value >> 8, 0xff, 8);
4124 proto_tree_add_text(tree, asn1->tvb,
4126 "%s : Channel Number (MSB), %d",
4130 my_decode_bitfield_value(bigbuf, value & 0x00ff, 0xff, 8);
4131 proto_tree_add_text(tree, asn1->tvb,
4132 saved_offset + 1, 1,
4133 "%s : Channel Number (LSB)",
4136 EXTRANEOUS_DATA_CHECK(len, 5);
4140 param_tdma_call_mode(ASN1_SCK *asn1, proto_tree *tree, guint len)
4145 saved_offset = asn1->offset;
4147 asn1_int32_value_decode(asn1, 1, &value);
4149 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
4150 proto_tree_add_text(tree, asn1->tvb,
4151 saved_offset, asn1->offset - saved_offset,
4155 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
4156 proto_tree_add_text(tree, asn1->tvb,
4157 saved_offset, asn1->offset - saved_offset,
4158 "%s : %sxtended modulation and framing",
4160 (value & 0x20) ? "E" : "No e");
4162 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
4163 proto_tree_add_text(tree, asn1->tvb,
4164 saved_offset, asn1->offset - saved_offset,
4165 "%s : Other voice coding %sacceptable",
4167 (value & 0x10) ? "" : "not ");
4169 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
4170 proto_tree_add_text(tree, asn1->tvb,
4171 saved_offset, asn1->offset - saved_offset,
4172 "%s : Other DQPSK channel %sacceptable",
4174 (value & 0x08) ? "" : "not ");
4176 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
4177 proto_tree_add_text(tree, asn1->tvb,
4178 saved_offset, asn1->offset - saved_offset,
4179 "%s : Half rate digital traffic channel %sacceptable",
4181 (value & 0x04) ? "" : "not ");
4183 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
4184 proto_tree_add_text(tree, asn1->tvb,
4185 saved_offset, asn1->offset - saved_offset,
4186 "%s : Full rate digital traffic channel %sacceptable",
4188 (value & 0x02) ? "" : "not ");
4190 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
4191 proto_tree_add_text(tree, asn1->tvb,
4192 saved_offset, asn1->offset - saved_offset,
4193 "%s : AMPS channel %sacceptable",
4195 (value & 0x01) ? "" : "not ");
4197 EXTRANEOUS_DATA_CHECK(len, 1);
4201 param_cdma_call_mode(ASN1_SCK *asn1, proto_tree *tree, guint len)
4206 saved_offset = asn1->offset;
4208 asn1_int32_value_decode(asn1, 1, &value);
4212 /* assuming older spec. no IS-880 */
4214 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
4215 proto_tree_add_text(tree, asn1->tvb,
4216 saved_offset, asn1->offset - saved_offset,
4222 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
4223 proto_tree_add_text(tree, asn1->tvb,
4224 saved_offset, asn1->offset - saved_offset,
4225 "%s : 450 MHz channel (Band Class 5) %sacceptable",
4227 (value & 0x80) ? "" : "not ");
4229 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
4230 proto_tree_add_text(tree, asn1->tvb,
4231 saved_offset, asn1->offset - saved_offset,
4232 "%s : Korean PCS channel (Band Class 4) %sacceptable",
4234 (value & 0x40) ? "" : "not ");
4236 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
4237 proto_tree_add_text(tree, asn1->tvb,
4238 saved_offset, asn1->offset - saved_offset,
4239 "%s : JTACS channel (Band Class 3) %sacceptable",
4241 (value & 0x20) ? "" : "not ");
4243 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
4244 proto_tree_add_text(tree, asn1->tvb,
4245 saved_offset, asn1->offset - saved_offset,
4246 "%s : TACS channel (Band Class 2) %sacceptable",
4248 (value & 0x10) ? "" : "not ");
4251 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
4252 proto_tree_add_text(tree, asn1->tvb,
4253 saved_offset, asn1->offset - saved_offset,
4254 "%s : CDMA 1900 MHz channel (Band Class 1) %sacceptable",
4256 (value & 0x08) ? "" : "not ");
4258 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
4259 proto_tree_add_text(tree, asn1->tvb,
4260 saved_offset, asn1->offset - saved_offset,
4261 "%s : NAMPS 800 MHz channel %sacceptable",
4263 (value & 0x04) ? "" : "not ");
4265 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
4266 proto_tree_add_text(tree, asn1->tvb,
4267 saved_offset, asn1->offset - saved_offset,
4268 "%s : AMPS 800 MHz channel %sacceptable",
4270 (value & 0x02) ? "" : "not ");
4272 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
4273 proto_tree_add_text(tree, asn1->tvb,
4274 saved_offset, asn1->offset - saved_offset,
4275 "%s : CDMA 800 MHz channel (Band Class 0) %sacceptable",
4277 (value & 0x01) ? "" : "not ");
4279 if (len == 1) return;
4281 saved_offset = asn1->offset;
4283 asn1_int32_value_decode(asn1, 1, &value);
4285 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
4286 proto_tree_add_text(tree, asn1->tvb,
4287 saved_offset, asn1->offset - saved_offset,
4291 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
4292 proto_tree_add_text(tree, asn1->tvb,
4293 saved_offset, asn1->offset - saved_offset,
4294 "%s : Secondary 800 MHz channel (Band Class 10) %sacceptable",
4296 (value & 0x10) ? "" : "not ");
4298 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
4299 proto_tree_add_text(tree, asn1->tvb,
4300 saved_offset, asn1->offset - saved_offset,
4301 "%s : 900 MHz channel (Band Class 9) %sacceptable",
4303 (value & 0x08) ? "" : "not ");
4305 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
4306 proto_tree_add_text(tree, asn1->tvb,
4307 saved_offset, asn1->offset - saved_offset,
4308 "%s : 1800 MHz channel (Band Class 8) %sacceptable",
4310 (value & 0x04) ? "" : "not ");
4312 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
4313 proto_tree_add_text(tree, asn1->tvb,
4314 saved_offset, asn1->offset - saved_offset,
4315 "%s : 700 MHz channel (Band Class 7) %sacceptable",
4317 (value & 0x02) ? "" : "not ");
4319 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
4320 proto_tree_add_text(tree, asn1->tvb,
4321 saved_offset, asn1->offset - saved_offset,
4322 "%s : 2 GHz channel (Band Class 6) %sacceptable",
4324 (value & 0x01) ? "" : "not ");
4326 EXTRANEOUS_DATA_CHECK(len, 2);
4330 param_namps_call_mode(ASN1_SCK *asn1, proto_tree *tree, guint len)
4335 saved_offset = asn1->offset;
4337 asn1_int32_value_decode(asn1, 1, &value);
4339 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
4340 proto_tree_add_text(tree, asn1->tvb,
4341 saved_offset, asn1->offset - saved_offset,
4345 proto_tree_add_text(tree, asn1->tvb,
4346 saved_offset, asn1->offset - saved_offset,
4347 ".... %d... : AMPS 1800 MHz channel %sacceptable",
4348 (value & 0x08) >> 3, (value & 0x08) ? "" : "not ");
4350 proto_tree_add_text(tree, asn1->tvb,
4351 saved_offset, asn1->offset - saved_offset,
4352 ".... .%d.. : NAMPS 1800 MHz channel %sacceptable",
4353 (value & 0x04) >> 2, (value & 0x04) ? "" : "not ");
4355 proto_tree_add_text(tree, asn1->tvb,
4356 saved_offset, asn1->offset - saved_offset,
4357 ".... ..%d. : AMPS 800 MHz channel %sacceptable",
4358 (value & 0x02) >> 1, (value & 0x02) ? "" : "not ");
4360 proto_tree_add_text(tree, asn1->tvb,
4361 saved_offset, asn1->offset - saved_offset,
4362 ".... ...%d : NAMPS 800 MHz channel %sacceptable",
4363 value & 0x01, (value & 0x01) ? "" : "not ");
4365 EXTRANEOUS_DATA_CHECK(len, 1);
4369 param_mob_rev(ASN1_SCK *asn1, proto_tree *tree, guint len)
4374 saved_offset = asn1->offset;
4376 asn1_int32_value_decode(asn1, 1, &value);
4378 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
4379 saved_offset, asn1->offset - saved_offset,
4383 EXTRANEOUS_DATA_CHECK(len, 1);
4387 param_cdma_band_class(ASN1_SCK *asn1, proto_tree *tree, guint len)
4389 gint32 value, temp_int;
4393 saved_offset = asn1->offset;
4395 asn1_int32_value_decode(asn1, 1, &value);
4397 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
4398 proto_tree_add_text(tree, asn1->tvb,
4399 saved_offset, asn1->offset - saved_offset,
4403 temp_int = value & 0x1f;
4404 if ((temp_int < 0) || (temp_int >= (gint) NUM_BAND_CLASS_STR))
4410 str = band_class_str[temp_int];
4413 my_decode_bitfield_value(bigbuf, value, 0x1f, 8);
4414 proto_tree_add_text(tree, asn1->tvb,
4415 saved_offset, asn1->offset - saved_offset,
4416 "%s : Band Class %s",
4420 EXTRANEOUS_DATA_CHECK(len, 1);
4424 param_calling_party_name(ASN1_SCK *asn1, proto_tree *tree, guint len)
4430 SHORT_DATA_CHECK(len, 1);
4432 saved_offset = asn1->offset;
4434 asn1_int32_value_decode(asn1, 1, &value);
4436 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
4437 proto_tree_add_text(tree, asn1->tvb,
4438 saved_offset, asn1->offset - saved_offset,
4439 "%s : Spec. has hardcoded as 0 0 1",
4442 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
4443 proto_tree_add_text(tree, asn1->tvb,
4444 saved_offset, asn1->offset - saved_offset,
4445 "%s : Availability, %s",
4447 (value & 0x10) ? "Name not available" : "Name available/unknown");
4449 my_decode_bitfield_value(bigbuf, value, 0x0c, 8);
4450 proto_tree_add_text(tree, asn1->tvb,
4451 saved_offset, asn1->offset - saved_offset,
4455 switch (value & 0x03)
4457 case 0: str = "Presentation allowed"; break;
4458 case 1: str = "Presentation restricted"; break;
4459 case 2: str = "Blocking toggle"; break;
4460 case 3: str = "No indication"; break;
4463 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
4464 proto_tree_add_text(tree, asn1->tvb,
4465 saved_offset, asn1->offset - saved_offset,
4466 "%s : Presentation Status, %s",
4470 if (len == 1) return;
4472 saved_offset = asn1->offset;
4474 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
4475 asn1->offset, len - 1,
4478 asn1->offset += (len - 1);
4482 param_red_party_name(ASN1_SCK *asn1, proto_tree *tree, guint len)
4488 SHORT_DATA_CHECK(len, 1);
4490 saved_offset = asn1->offset;
4492 asn1_int32_value_decode(asn1, 1, &value);
4494 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
4495 proto_tree_add_text(tree, asn1->tvb,
4496 saved_offset, asn1->offset - saved_offset,
4497 "%s : Spec. has hardcoded as 0 1 1",
4500 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
4501 proto_tree_add_text(tree, asn1->tvb,
4502 saved_offset, asn1->offset - saved_offset,
4503 "%s : Availability, %s",
4505 (value & 0x10) ? "Name not available" : "Name available/unknown");
4507 my_decode_bitfield_value(bigbuf, value, 0x0c, 8);
4508 proto_tree_add_text(tree, asn1->tvb,
4509 saved_offset, asn1->offset - saved_offset,
4513 switch (value & 0x03)
4515 case 0: str = "Presentation allowed"; break;
4516 case 1: str = "Presentation restricted"; break;
4517 case 2: str = "Blocking toggle"; break;
4518 case 3: str = "No indication"; break;
4521 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
4522 proto_tree_add_text(tree, asn1->tvb,
4523 saved_offset, asn1->offset - saved_offset,
4524 "%s : Presentation Status, %s",
4528 if (len == 1) return;
4530 saved_offset = asn1->offset;
4532 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
4533 asn1->offset, len - 1,
4536 asn1->offset += (len - 1);
4540 param_srvc_id(ASN1_SCK *asn1, proto_tree *tree, guint len)
4543 proto_tree_add_text(tree, asn1->tvb,
4545 "Service Identifier (Spec. does not define clearly)");
4547 asn1->offset += len;
4551 param_all_or_none(ASN1_SCK *asn1, proto_tree *tree, guint len)
4557 EXACT_DATA_CHECK(len, 1);
4559 saved_offset = asn1->offset;
4561 asn1_int32_value_decode(asn1, 1, &value);
4565 case 0: str = "Not used"; break;
4566 case 1: str = "All changes must succeed or none should be applied"; break;
4567 case 2: str = "Treat each change independently"; break;
4569 if ((value >= 3) && (value <= 223)) { str = "Reserved, treat as All changes must succeed or none should be applied"; }
4570 else { str = "Reserved for protocol extension, treat as All changes must succeed or none should be applied"; }
4574 proto_tree_add_text(tree, asn1->tvb,
4575 saved_offset, asn1->offset - saved_offset,
4580 param_change(ASN1_SCK *asn1, proto_tree *tree, guint len)
4586 EXACT_DATA_CHECK(len, 1);
4588 saved_offset = asn1->offset;
4590 asn1_int32_value_decode(asn1, 1, &value);
4594 case 0: str = "Not used"; break;
4595 case 1: str = "Set Data Item to Default Value"; break;
4596 case 2: str = "Add Data Item"; break;
4597 case 3: str = "Delete Data Item"; break;
4598 case 4: str = "Replace Data Item with associated DataValue"; break;
4600 if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as Set Data Item to Default Value"; }
4601 else { str = "Reserved for protocol extension, treat as Set Data Item to Default Value"; }
4605 proto_tree_add_text(tree, asn1->tvb,
4606 saved_offset, asn1->offset - saved_offset,
4611 param_data_result(ASN1_SCK *asn1, proto_tree *tree, guint len)
4617 EXACT_DATA_CHECK(len, 1);
4619 saved_offset = asn1->offset;
4621 asn1_int32_value_decode(asn1, 1, &value);
4625 case 0: str = "Not used"; break;
4626 case 1: str = "Successful"; break;
4627 case 2: str = "Unsuccessful, unspecified"; break;
4628 case 3: str = "Unsuccessful, no default value available"; break;
4630 if ((value >= 4) && (value <= 95)) { str = "Reserved, treat as Unsuccessful"; }
4631 else if ((value >= 96) && (value <= 127)) { str = "Reserved for protocol extension, treat as Unsuccessful"; }
4632 else if ((value >= 128) && (value <= 223)) { str = "Reserved, treat as Successful"; }
4633 else { str = "Reserved for protocol extension, treat as Successful"; }
4637 proto_tree_add_text(tree, asn1->tvb,
4638 saved_offset, asn1->offset - saved_offset,
4643 param_fail_cause(ASN1_SCK *asn1, proto_tree *tree, guint len)
4647 SHORT_DATA_CHECK(len, 2);
4649 saved_offset = asn1->offset;
4651 proto_tree_add_text(tree, asn1->tvb,
4653 "ISUP Cause Indicator");
4655 asn1->offset += len;
4659 param_fail_type(ASN1_SCK *asn1, proto_tree *tree, guint len)
4665 EXACT_DATA_CHECK(len, 1);
4667 saved_offset = asn1->offset;
4669 asn1_int32_value_decode(asn1, 1, &value);
4673 case 0: str = "Not used"; break;
4674 case 1: str = "Call abandoned"; break;
4675 case 2: str = "Resource disconnect"; break;
4676 case 3: str = "Failure at MSC"; break;
4677 case 4: str = "SSFT expiration"; break;
4679 if ((value >= 5) && (value <= 223)) { str = "Reserved, ignore"; }
4680 else { str = "Reserved for protocol extension, ignore"; }
4684 proto_tree_add_text(tree, asn1->tvb,
4685 saved_offset, asn1->offset - saved_offset,
4690 param_resume_pic(ASN1_SCK *asn1, proto_tree *tree, guint len)
4696 EXACT_DATA_CHECK(len, 1);
4698 saved_offset = asn1->offset;
4700 asn1_int32_value_decode(asn1, 1, &value);
4704 case 0: str = "Not used"; break;
4705 case 1: str = "Continue Call Processing"; break;
4706 case 2: str = "Collect Information PIC"; break;
4707 case 3: str = "Analyze Information PIC"; break;
4708 case 4: str = "Select Route PIC"; break;
4709 case 5: str = "Authorize Origination_Attempt PIC"; break;
4710 case 6: str = "Authorize Call Setup PIC"; break;
4711 case 7: str = "Send Call PIC"; break;
4712 case 8: str = "O Alerting PIC"; break;
4713 case 9: str = "O Active PIC"; break;
4714 case 10: str = "O Suspended PIC"; break;
4715 case 11: str = "O Null PIC"; break;
4716 case 32: str = "Select Facility PIC"; break;
4717 case 33: str = "Present Call PIC"; break;
4718 case 34: str = "Authorize Termination Attempt PIC"; break;
4719 case 35: str = "T Alerting PIC"; break;
4720 case 36: str = "T Active PIC"; break;
4721 case 37: str = "T Suspended PIC"; break;
4722 case 38: str = "T Null PIC"; break;
4724 if ((value >= 12) && (value <= 31)) { str = "Reserved, treat as Not used"; }
4725 else if ((value >= 39) && (value <= 223)) { str = "Reserved, ignore"; }
4726 else { str = "Reserved for protocol extension, ignore"; }
4730 proto_tree_add_text(tree, asn1->tvb,
4731 saved_offset, asn1->offset - saved_offset,
4732 "Point in Call, %s (%d)",
4738 param_special_rsc(ASN1_SCK *asn1, proto_tree *tree, guint len)
4744 saved_offset = asn1->offset;
4750 asn1_int32_value_decode(asn1, 1, &value);
4754 case 0: str = "Not used"; break;
4755 case 1: str = "DTMF tone detector"; break;
4756 case 2: str = "Automatic Speech Recognition - Speaker Independent - Digits"; break;
4757 case 3: str = "Automatic Speech Recognition - Speaker Independent - Speech User Interface Version 1"; break;
4759 if ((value >= 4) && (value <= 223)) { str = "Reserved, treat as Not used"; }
4760 else { str = "Reserved for protocol extension, treat as Not used"; }
4764 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
4765 saved_offset, asn1->offset - saved_offset,
4766 "[%d] Resource Type, %s",
4770 saved_offset = asn1->offset;
4772 while ((len - i) > 0);
4776 param_time_date_offset(ASN1_SCK *asn1, proto_tree *tree, guint len)
4781 EXACT_DATA_CHECK(len, 2);
4783 saved_offset = asn1->offset;
4785 asn1_int32_value_decode(asn1, 2, &value);
4787 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
4788 saved_offset, asn1->offset - saved_offset,
4794 param_network_tmsi(ASN1_SCK *asn1, proto_tree *tree, guint len)
4796 gint32 value, addr_type, first_dig;
4801 SHORT_DATA_CHECK(len, 4);
4803 saved_offset = asn1->offset;
4805 asn1_int32_value_decode(asn1, 4, &value);
4807 proto_tree_add_text(tree, asn1->tvb,
4808 saved_offset, asn1->offset - saved_offset,
4812 if (len == 4) return;
4814 saved_offset = asn1->offset;
4816 asn1_int32_value_decode(asn1, 1, &value);
4818 first_dig = Dgt_tbcd.out[(value & 0xf0) >> 4];
4820 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
4821 proto_tree_add_text(tree, asn1->tvb,
4822 saved_offset, asn1->offset - saved_offset,
4823 "%s : First digit of TMSI Zone, %c",
4827 addr_type = value & 0x0f;
4830 case 0: str = "Not used"; break;
4831 case 1: str = "E.212 based routing"; break;
4832 case 2: str = "20-bit TDMA TMSI"; break;
4833 case 3: str = "24-bit TDMA TMSI"; break;
4835 str = "Reserved for protocol extension, treat as Not used";
4839 my_decode_bitfield_value(bigbuf, value, 0x0f, 8);
4840 proto_tree_add_text(tree, asn1->tvb,
4841 saved_offset, asn1->offset - saved_offset,
4842 "%s : Type of addressing, %s",
4846 if (len == 5) return;
4848 saved_offset = asn1->offset;
4850 asn1_string_value_decode(asn1, (len-5), &poctets);
4852 bigbuf[0] = first_dig;
4854 my_dgt_tbcd_unpack(bigbuf+1, poctets, (len-5), &Dgt_tbcd);
4857 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
4858 saved_offset - 1, (len-5)+1,
4864 param_reqd_param_mask(ASN1_SCK *asn1, proto_tree *tree, guint len)
4869 saved_offset = asn1->offset;
4871 asn1_int32_value_decode(asn1, 1, &value);
4873 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
4874 proto_tree_add_text(tree, asn1->tvb,
4875 saved_offset, asn1->offset - saved_offset,
4879 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
4880 proto_tree_add_text(tree, asn1->tvb,
4881 saved_offset, asn1->offset - saved_offset,
4882 "%s : Location Area ID (LOCID) %srequired",
4884 (value & 0x10) ? "" : "not ");
4886 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
4887 proto_tree_add_text(tree, asn1->tvb,
4888 saved_offset, asn1->offset - saved_offset,
4889 "%s : TMSI %srequired",
4891 (value & 0x08) ? "" : "not ");
4893 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
4894 proto_tree_add_text(tree, asn1->tvb,
4895 saved_offset, asn1->offset - saved_offset,
4896 "%s : ESN %srequired",
4898 (value & 0x04) ? "" : "not ");
4900 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
4901 proto_tree_add_text(tree, asn1->tvb,
4902 saved_offset, asn1->offset - saved_offset,
4903 "%s : MIN %srequired",
4905 (value & 0x02) ? "" : "not ");
4907 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
4908 proto_tree_add_text(tree, asn1->tvb,
4909 saved_offset, asn1->offset - saved_offset,
4910 "%s : IMSI %srequired",
4912 (value & 0x01) ? "" : "not ");
4914 EXTRANEOUS_DATA_CHECK(len, 1);
4918 param_srvc_red_cause(ASN1_SCK *asn1, proto_tree *tree, guint len)
4924 saved_offset = asn1->offset;
4926 asn1_int32_value_decode(asn1, 1, &value);
4930 case 0: str = "Not used"; break;
4931 case 1: str = "Normal Registration"; break;
4932 case 2: str = "System Not Found"; break;
4933 case 3: str = "Protocol Mismatch"; break;
4934 case 4: str = "Registration Rejection"; break;
4935 case 5: str = "Wrong SID"; break;
4936 case 6: str = "Wrong NID"; break;
4938 if ((value >= 7) && (value <= 223)) { str = "Reserved, treat as Normal Registration"; }
4939 else { str = "Reserved for protocol extension. If unknown, treat as Normal Registration"; }
4943 proto_tree_add_text(tree, asn1->tvb,
4944 saved_offset, asn1->offset - saved_offset,
4947 EXTRANEOUS_DATA_CHECK(len, 1);
4951 param_srvc_red_info(ASN1_SCK *asn1, proto_tree *tree, guint len)
4956 saved_offset = asn1->offset;
4958 asn1_int32_value_decode(asn1, 1, &value);
4960 my_decode_bitfield_value(bigbuf, value, 0xfc, 8);
4961 proto_tree_add_text(tree, asn1->tvb,
4962 saved_offset, asn1->offset - saved_offset,
4966 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
4967 proto_tree_add_text(tree, asn1->tvb,
4968 saved_offset, asn1->offset - saved_offset,
4969 "%s : NDSS Status (NDS), %ssuppressed",
4971 (value & 0x02) ? "" : "not ");
4973 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
4974 proto_tree_add_text(tree, asn1->tvb,
4975 saved_offset, asn1->offset - saved_offset,
4976 "%s : Return If Fail (RIF), If MS fails to access the redirected system, MS shall %sreturn to the serving system",
4978 (value & 0x01) ? "" : "not ");
4980 EXTRANEOUS_DATA_CHECK(len, 1);
4984 param_roaming_ind(ASN1_SCK *asn1, proto_tree *tree, guint len)
4990 saved_offset = asn1->offset;
4992 asn1_int32_value_decode(asn1, 1, &value);
4996 case 0: str = "Roaming Indicator On"; break;
4997 case 1: str = "Roaming Indicator Off"; break;
4998 case 2: str = "Roaming Indicator Flashing"; break;
4999 case 3: str = "Out of Neighborhood"; break;
5000 case 4: str = "Out of Building"; break;
5001 case 5: str = "Roaming - Preferred System"; break;
5002 case 6: str = "Roaming - Available System"; break;
5003 case 7: str = "Roaming - Alliance Partner"; break;
5004 case 8: str = "Roaming - Premium Partner"; break;
5005 case 9: str = "Roaming - Full Service Functionality"; break;
5006 case 10: str = "Roaming - Partial Service Functionality"; break;
5007 case 11: str = "Roaming Banner On"; break;
5008 case 12: str = "Roaming Banner Off"; break;
5010 if ((value >= 13) && (value <= 63)) { str = "Reserved for Standard Enhanced Roaming Indicator Numbers"; }
5011 else if ((value >= 64) && (value <= 127)) { str = "Reserved for Non-Standard Enhanced Roaming Indicator Numbers"; }
5012 else { str = "Reserved"; }
5016 proto_tree_add_text(tree, asn1->tvb,
5017 saved_offset, asn1->offset - saved_offset,
5020 EXTRANEOUS_DATA_CHECK(len, 1);
5024 param_cdma_pci(ASN1_SCK *asn1, proto_tree *tree, guint len)
5029 EXACT_DATA_CHECK(len, 1);
5031 saved_offset = asn1->offset;
5033 asn1_int32_value_decode(asn1, 1, &value);
5035 my_decode_bitfield_value(bigbuf, value, 0xfe, 8);
5036 proto_tree_add_text(tree, asn1->tvb,
5037 saved_offset, asn1->offset - saved_offset,
5041 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
5042 proto_tree_add_text(tree, asn1->tvb,
5043 saved_offset, asn1->offset - saved_offset,
5044 "%s : CDMA PWR_COMB_IND",
5049 param_cdma_chan_num(ASN1_SCK *asn1, proto_tree *tree, guint len)
5054 SHORT_DATA_CHECK(len, 2);
5056 saved_offset = asn1->offset;
5058 asn1_int32_value_decode(asn1, 2, &value);
5060 my_decode_bitfield_value(bigbuf, value >> 8, 0xf8, 8);
5061 proto_tree_add_text(tree, asn1->tvb,
5066 my_decode_bitfield_value(bigbuf, value >> 8, 0x07, 8);
5067 proto_tree_add_text(tree, asn1->tvb,
5069 "%s : CDMA Channel Number (MSB) %d",
5073 my_decode_bitfield_value(bigbuf, value & 0x00ff, 0xff, 8);
5074 proto_tree_add_text(tree, asn1->tvb,
5076 "%s : CDMA Channel Number (LSB)",
5079 EXTRANEOUS_DATA_CHECK(len, 2);
5083 param_cdma_sci(ASN1_SCK *asn1, proto_tree *tree, guint len)
5088 EXACT_DATA_CHECK(len, 1);
5090 saved_offset = asn1->offset;
5092 asn1_int32_value_decode(asn1, 1, &value);
5094 my_decode_bitfield_value(bigbuf, value, 0xf8, 8);
5095 proto_tree_add_text(tree, asn1->tvb,
5096 saved_offset, asn1->offset - saved_offset,
5100 my_decode_bitfield_value(bigbuf, value, 0x07, 8);
5101 proto_tree_add_text(tree, asn1->tvb,
5102 saved_offset, asn1->offset - saved_offset,
5103 "%s : Slot Cycle Index, %d",
5109 param_vp_report(ASN1_SCK *asn1, proto_tree *tree, guint len)
5115 EXACT_DATA_CHECK(len, 1);
5117 saved_offset = asn1->offset;
5119 asn1_int32_value_decode(asn1, 1, &value);
5123 case 0: str = "Not used"; break;
5124 case 1: str = "Voice Privacy not attempted"; break;
5125 case 2: str = "Voice Privacy no response"; break;
5126 case 3: str = "Voiec Privacy successful is active"; break;
5127 case 4: str = "Voice Privacy failed"; break;
5129 if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as Voice Privacy not attempted"; }
5130 else { str = "Reserved for protocol extension, treat as Voice Privacy not attempted"; }
5134 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5135 saved_offset, asn1->offset - saved_offset,
5142 param_cdma_scm(ASN1_SCK *asn1, proto_tree *tree, guint len)
5148 saved_offset = asn1->offset;
5150 asn1_int32_value_decode(asn1, 1, &value);
5152 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
5153 proto_tree_add_text(tree, asn1->tvb,
5154 saved_offset, asn1->offset - saved_offset,
5158 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
5159 proto_tree_add_text(tree, asn1->tvb,
5160 saved_offset, asn1->offset - saved_offset,
5161 "%s : Dual-mode Indicator, %s",
5163 (value & 0x40) ? "Dual mode CDMA" : "CDMA only");
5165 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
5166 proto_tree_add_text(tree, asn1->tvb,
5167 saved_offset, asn1->offset - saved_offset,
5168 "%s : Slotted mode Indicator, %s",
5170 (value & 0x20) ? "slotted capable" : "slotted incapable");
5172 my_decode_bitfield_value(bigbuf, value, 0x18, 8);
5173 proto_tree_add_text(tree, asn1->tvb,
5174 saved_offset, asn1->offset - saved_offset,
5178 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
5179 proto_tree_add_text(tree, asn1->tvb,
5180 saved_offset, asn1->offset - saved_offset,
5181 "%s : Analog Transmission, %s",
5183 (value & 0x04) ? "discontinuous" : "continuous");
5185 switch (value & 0x03)
5187 case 0: str = "Power Class I"; break;
5188 case 1: str = "Power Class II"; break;
5189 case 2: str = "Power Class III"; break;
5190 case 3: str = "Reserved"; break;
5193 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
5194 proto_tree_add_text(tree, asn1->tvb,
5195 saved_offset, asn1->offset - saved_offset,
5200 EXTRANEOUS_DATA_CHECK(len, 1);
5204 param_ota_result_code(ASN1_SCK *asn1, proto_tree *tree, guint len)
5210 saved_offset = asn1->offset;
5212 asn1_int32_value_decode(asn1, 1, &value);
5216 case 0: str = "Accepted - Successful"; break;
5217 case 1: str = "Rejected - Unknown cause"; break;
5218 case 2: str = "Computation Failure - E.g., unable to compute A-key"; break;
5219 case 3: str = "CSC Rejected - CSC challenge failure"; break;
5220 case 4: str = "Unrecognized OTASPCallEntry"; break;
5221 case 5: str = "Unsupported AKeyProtocolVersion(s)"; break;
5222 case 6: str = "Unable to Commit"; break;
5224 if ((value >= 7) && (value <= 223)) { str = "Reserved, treat as Rejected - Unknown cause"; }
5225 else { str = "Reserved for protocol extension, treat as Rejected - Unknown cause"; }
5229 proto_tree_add_text(tree, asn1->tvb,
5230 saved_offset, asn1->offset - saved_offset,
5235 EXTRANEOUS_DATA_CHECK(len, 1);
5239 param_cdma_scm2(ASN1_SCK *asn1, proto_tree *tree, guint len)
5244 saved_offset = asn1->offset;
5246 asn1_int32_value_decode(asn1, 1, &value);
5248 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5249 saved_offset, asn1->offset - saved_offset,
5253 EXTRANEOUS_DATA_CHECK(len, 1);
5257 param_tdma_term_cap(ASN1_SCK *asn1, proto_tree *tree, guint len)
5263 SHORT_DATA_CHECK(len, 4);
5265 saved_offset = asn1->offset;
5267 asn1_int32_value_decode(asn1, 1, &value);
5269 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
5270 proto_tree_add_text(tree, asn1->tvb,
5271 saved_offset, asn1->offset - saved_offset,
5275 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
5276 proto_tree_add_text(tree, asn1->tvb,
5277 saved_offset, asn1->offset - saved_offset,
5278 "%s : 1800 MHz F channel %sacceptable",
5280 (value & 0x40) ? "" : "not ");
5282 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
5283 proto_tree_add_text(tree, asn1->tvb,
5284 saved_offset, asn1->offset - saved_offset,
5285 "%s : 1800 MHz E channel %sacceptable",
5287 (value & 0x20) ? "" : "not ");
5289 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
5290 proto_tree_add_text(tree, asn1->tvb,
5291 saved_offset, asn1->offset - saved_offset,
5292 "%s : 1800 MHz D channel %sacceptable",
5294 (value & 0x10) ? "" : "not ");
5296 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
5297 proto_tree_add_text(tree, asn1->tvb,
5298 saved_offset, asn1->offset - saved_offset,
5299 "%s : 1800 MHz C channel %sacceptable",
5301 (value & 0x08) ? "" : "not ");
5303 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
5304 proto_tree_add_text(tree, asn1->tvb,
5305 saved_offset, asn1->offset - saved_offset,
5306 "%s : 1800 MHz B channel %sacceptable",
5308 (value & 0x04) ? "" : "not ");
5310 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
5311 proto_tree_add_text(tree, asn1->tvb,
5312 saved_offset, asn1->offset - saved_offset,
5313 "%s : %s acceptable",
5315 (value & 0x02) ? "1800 MHz A channel" : "1800 MHz A&B Digital channel not");
5317 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
5318 proto_tree_add_text(tree, asn1->tvb,
5319 saved_offset, asn1->offset - saved_offset,
5320 "%s : 800 MHz A&B channel %sacceptable",
5322 (value & 0x01) ? "" : "not ");
5324 saved_offset = asn1->offset;
5326 asn1_int32_value_decode(asn1, 1, &value);
5328 my_decode_bitfield_value(bigbuf, value, 0xfc, 8);
5329 proto_tree_add_text(tree, asn1->tvb,
5330 saved_offset, asn1->offset - saved_offset,
5334 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
5335 proto_tree_add_text(tree, asn1->tvb,
5336 saved_offset, asn1->offset - saved_offset,
5337 "%s : IS-641 Voice Coder %sacceptable",
5339 (value & 0x02) ? "" : "not ");
5341 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
5342 proto_tree_add_text(tree, asn1->tvb,
5343 saved_offset, asn1->offset - saved_offset,
5344 "%s : VSELP Voice Coder %sacceptable",
5346 (value & 0x01) ? "" : "not ");
5348 saved_offset = asn1->offset;
5350 asn1_int32_value_decode(asn1, 1, &value);
5354 case 0: str = "EIA-553 or IS-54-A"; break;
5355 case 1: str = "TIA/EIA-627 (IS-54-B)"; break;
5356 case 2: str = "IS-136"; break;
5357 case 3: str = "Reserved (ANSI J-STD-011)"; break;
5358 case 4: str = "PV 0 as published in TIA/EIA-136-0 and IS-136-A"; break;
5359 case 5: str = "PV 1 as published in TIA/EIA-136-A"; break;
5360 case 6: str = "PV 2 as published in TIA/EIA-136-A"; break;
5361 case 7: str = "PV 3 as published in TIA/EIA-136-A"; break;
5363 str = "Reserved, treat as EIA-553 or IS-54-A";
5367 proto_tree_add_text(tree, asn1->tvb,
5369 "Protocol Version, %s",
5372 saved_offset = asn1->offset;
5374 asn1_int32_value_decode(asn1, 1, &value);
5376 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
5377 proto_tree_add_text(tree, asn1->tvb,
5378 saved_offset, asn1->offset - saved_offset,
5379 "%s : Triple Rate (3RATE) %ssupported",
5381 (value & 0x80) ? "" : "not ");
5383 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
5384 proto_tree_add_text(tree, asn1->tvb,
5385 saved_offset, asn1->offset - saved_offset,
5386 "%s : Double Rate (2RATE) %ssupported",
5388 (value & 0x40) ? "" : "not ");
5390 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
5391 proto_tree_add_text(tree, asn1->tvb,
5392 saved_offset, asn1->offset - saved_offset,
5393 "%s : Full Rate (FRATE) %ssupported",
5395 (value & 0x20) ? "" : "not ");
5397 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
5398 proto_tree_add_text(tree, asn1->tvb,
5399 saved_offset, asn1->offset - saved_offset,
5400 "%s : Half Rate (HRATE) %ssupported",
5402 (value & 0x10) ? "" : "not ");
5404 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
5405 proto_tree_add_text(tree, asn1->tvb,
5406 saved_offset, asn1->offset - saved_offset,
5407 "%s : Analog Voice (AVOX) %ssupported",
5409 (value & 0x08) ? "" : "not ");
5411 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
5412 proto_tree_add_text(tree, asn1->tvb,
5413 saved_offset, asn1->offset - saved_offset,
5414 "%s : Secure Telephone Unit III (STU3) %ssupported",
5416 (value & 0x04) ? "" : "not ");
5418 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
5419 proto_tree_add_text(tree, asn1->tvb,
5420 saved_offset, asn1->offset - saved_offset,
5421 "%s : Group 3 Fax (G3FAX) %ssupported",
5423 (value & 0x02) ? "" : "not ");
5425 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
5426 proto_tree_add_text(tree, asn1->tvb,
5427 saved_offset, asn1->offset - saved_offset,
5428 "%s : Asynchronous Data (ADS) %ssupported",
5430 (value & 0x01) ? "" : "not ");
5432 EXTRANEOUS_DATA_CHECK(len, 4);
5436 param_tdma_voice_coder(ASN1_SCK *asn1, proto_tree *tree, guint len)
5439 guint orig_offset, saved_offset;
5442 SHORT_DATA_CHECK(len, 2);
5444 orig_offset = asn1->offset;
5445 saved_offset = asn1->offset;
5449 asn1_int32_value_decode(asn1, 1, &value);
5451 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
5452 proto_tree_add_text(tree, asn1->tvb,
5453 saved_offset, asn1->offset - saved_offset,
5457 vc = (value & 0x0f);
5460 case 0: str = "Not used"; break;
5461 case 1: str = "VSELP Voice Coder acceptable"; break;
5462 case 2: str = "IS-641 Voice Coder acceptable"; break;
5463 case 6: str = "Reserved for SOC/BSMC Specific signaling. If unknown, use any acceptable value"; break;
5465 if ((vc >= 3) && (vc <= 5)) { str = "Reserved. Ignore on reception, use any acceptable value"; }
5466 else if ((vc >= 7) && (vc <= 12)) { str = "Reserved. Ignore on reception, use any acceptable value"; }
5467 else if ((vc >= 13) && (vc <= 15)) { str = "Reserved for protocol extension. If unknown, use any acceptable value"; }
5471 my_decode_bitfield_value(bigbuf, value, 0x0f, 8);
5472 proto_tree_add_text(tree, asn1->tvb,
5473 saved_offset, asn1->offset - saved_offset,
5474 "%s : Voice Coder, %s",
5478 saved_offset = asn1->offset;
5480 while ((len - (saved_offset - orig_offset)) > 0);
5484 param_cdma_pilot_pn(ASN1_SCK *asn1, proto_tree *tree, guint len)
5489 SHORT_DATA_CHECK(len, 2);
5491 saved_offset = asn1->offset;
5493 asn1_int32_value_decode(asn1, 2, &value);
5495 my_decode_bitfield_value(bigbuf, value >> 8, 0xfe, 8);
5496 proto_tree_add_text(tree, asn1->tvb,
5501 my_decode_bitfield_value(bigbuf, value >> 8, 0x01, 8);
5502 proto_tree_add_text(tree, asn1->tvb,
5504 "%s : Pilot PN (MSB), %d",
5505 bigbuf, value & 0x01ff);
5507 my_decode_bitfield_value(bigbuf, value & 0x00ff, 0xff, 8);
5508 proto_tree_add_text(tree, asn1->tvb,
5509 saved_offset + 1, 1,
5510 "%s : Pilot PN (LSB)",
5513 EXTRANEOUS_DATA_CHECK(len, 2);
5517 param_cdma_pilot_strength(ASN1_SCK *asn1, proto_tree *tree, guint len)
5522 EXACT_DATA_CHECK(len, 1);
5524 saved_offset = asn1->offset;
5526 asn1_int32_value_decode(asn1, 1, &value);
5528 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
5529 proto_tree_add_text(tree, asn1->tvb,
5530 saved_offset, asn1->offset - saved_offset,
5534 my_decode_bitfield_value(bigbuf, value, 0x3f, 8);
5535 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5536 saved_offset, asn1->offset - saved_offset,
5543 param_trunk_stat(ASN1_SCK *asn1, proto_tree *tree, guint len)
5549 EXACT_DATA_CHECK(len, 1);
5551 saved_offset = asn1->offset;
5553 asn1_int32_value_decode(asn1, 1, &value);
5557 case 0: str = "Idle"; break;
5558 case 1: str = "Blocked"; break;
5560 if ((value >= 2) && (value <= 223)) { str = "Reserved, treat as ERROR or Blocked"; }
5561 else { str = "Reserved for protocol extension, treat as ERROR or Blocked"; }
5565 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5566 saved_offset, asn1->offset - saved_offset,
5572 param_pref_lang_ind(ASN1_SCK *asn1, proto_tree *tree, guint len)
5578 saved_offset = asn1->offset;
5580 asn1_int32_value_decode(asn1, 1, &value);
5584 case 0: str = "Unspecified"; break;
5585 case 1: str = "English"; break;
5586 case 2: str = "French"; break;
5587 case 3: str = "Spanish"; break;
5588 case 4: str = "German"; break;
5589 case 5: str = "Portuguese"; break;
5591 str = "Reserved, treat as Unspecified";
5595 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5596 saved_offset, asn1->offset - saved_offset,
5597 "Preferred Language, %s",
5600 EXTRANEOUS_DATA_CHECK(len, 1);
5604 param_rand_valtime(ASN1_SCK *asn1, proto_tree *tree, guint len)
5610 saved_offset = asn1->offset;
5612 asn1_int32_value_decode(asn1, 1, &value);
5616 str = "RAND shall not be stored";
5620 sprintf(bigbuf, "RAND may be used for %d minutes", value);
5624 proto_tree_add_text(tree, asn1->tvb,
5625 saved_offset, asn1->offset - saved_offset,
5628 EXTRANEOUS_DATA_CHECK(len, 1);
5632 param_tdma_burst_ind(ASN1_SCK *asn1, proto_tree *tree, guint len)
5638 EXACT_DATA_CHECK(len, 1);
5640 saved_offset = asn1->offset;
5642 asn1_int32_value_decode(asn1, 1, &value);
5644 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
5645 proto_tree_add_text(tree, asn1->tvb,
5646 saved_offset, asn1->offset - saved_offset,
5650 my_decode_bitfield_value(bigbuf, value, 0x7c, 8);
5651 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5652 saved_offset, asn1->offset - saved_offset,
5653 "%s : Time Alignment Offset (TA), %d",
5655 (value & 0x7c) >> 2);
5657 switch (value & 0x03)
5659 case 0: str = "Transmit normal burst after cell-to-cell handoff"; break;
5660 case 1: str = "Transmit normal burst after handoff within cell"; break;
5661 case 2: str = "Transmit shortened burst after cell-to-cell handoff"; break;
5662 case 3: str = "Reserved, treat with RETURN ERROR"; break;
5665 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
5666 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5667 saved_offset, asn1->offset - saved_offset,
5668 "%s : Burst Code, %s",
5674 param_orig_ind(ASN1_SCK *asn1, proto_tree *tree, guint len)
5680 EXACT_DATA_CHECK(len, 1);
5682 saved_offset = asn1->offset;
5684 asn1_int32_value_decode(asn1, 1, &value);
5688 case 0: str = "Not used"; break;
5689 case 1: str = "Prior agreement"; break;
5690 case 2: str = "Origination denied"; break;
5691 case 3: str = "Local calls only"; break;
5692 case 4: str = "Selected leading digits of directory number or of international E.164 number, see Digits(Destination)"; break;
5693 case 5: str = "Selected leading digits of directory number or of international E.164 number and local calls only, see Digits(Destination)"; break;
5694 case 6: str = "National long distance"; break;
5695 case 7: str = "International calls"; break;
5696 case 8: str = "Single directory number or international E.164 number, see Digits(Destination)"; break;
5698 if ((value >= 9) && (value <= 223)) { str = "Reserved, treat as Local calls only"; }
5699 else { str = "Reserved for protocol extension, treat as Local calls only"; }
5703 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5704 saved_offset, asn1->offset - saved_offset,
5705 "Allowed Call Types, %s",
5710 param_ms_loc(ASN1_SCK *asn1, proto_tree *tree, guint len)
5715 SHORT_DATA_CHECK(len, 7);
5717 saved_offset = asn1->offset;
5719 asn1_int32_value_decode(asn1, 3, &value);
5721 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5722 saved_offset, asn1->offset - saved_offset,
5723 "Latitude in tenths of a second, %d",
5726 saved_offset = asn1->offset;
5728 asn1_int32_value_decode(asn1, 3, &value);
5730 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5731 saved_offset, asn1->offset - saved_offset,
5732 "Longitude in tenths of a second, %d",
5735 saved_offset = asn1->offset;
5737 asn1_int32_value_decode(asn1, MIN(len - 6, 2), &value);
5739 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5740 saved_offset, asn1->offset - saved_offset,
5741 "Resolution in units of 1 foot, %d",
5744 EXTRANEOUS_DATA_CHECK(len, 8);
5748 param_unique_chal_rep(ASN1_SCK *asn1, proto_tree *tree, guint len)
5754 saved_offset = asn1->offset;
5756 asn1_int32_value_decode(asn1, 1, &value);
5760 case 0: str = "Not used"; break;
5761 case 1: str = "Unique Challenge not attempted"; break;
5762 case 2: str = "Unique Challenge no response"; break;
5763 case 3: str = "Unique Challenge successful"; break;
5764 case 4: str = "Unique Challenge failed"; break;
5766 if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as Unique Challenge not attempted"; }
5767 else { str = "Reserved for protocol extension, treat as Unique Challenge not attempted"; }
5771 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5772 saved_offset, asn1->offset - saved_offset,
5775 EXTRANEOUS_DATA_CHECK(len, 1);
5779 param_rand_unique(ASN1_SCK *asn1, proto_tree *tree, guint len)
5783 EXACT_DATA_CHECK(len, 3);
5785 saved_offset = asn1->offset;
5787 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5789 "24-bit random number used as input to the CAVE algorithm for authenticating a specific MS");
5791 asn1->offset += len;
5795 param_vpmask(ASN1_SCK *asn1, proto_tree *tree, guint len)
5800 EXACT_DATA_CHECK(len, 66);
5802 saved_offset = asn1->offset;
5804 asn1_int32_value_decode(asn1, 1, &value);
5806 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
5807 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5808 saved_offset, asn1->offset - saved_offset,
5812 my_decode_bitfield_value(bigbuf, value, 0x0f, 8);
5813 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5814 saved_offset, asn1->offset - saved_offset,
5815 "%s : Voice Privacy Mask-A (VPMASK-A) (MSB)",
5818 saved_offset = asn1->offset;
5820 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5822 "Voice Privacy Mask-A (VPMASK-A)");
5826 saved_offset = asn1->offset;
5828 asn1_int32_value_decode(asn1, 1, &value);
5830 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
5831 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5832 saved_offset, asn1->offset - saved_offset,
5836 my_decode_bitfield_value(bigbuf, value, 0x0f, 8);
5837 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5838 saved_offset, asn1->offset - saved_offset,
5839 "%s : Voice Privacy Mask-B (VPMASK-B) (MSB)",
5842 saved_offset = asn1->offset;
5844 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5846 "Voice Privacy Mask-B (VPMASK-B)");
5852 param_ssd(ASN1_SCK *asn1, proto_tree *tree, guint len)
5856 EXACT_DATA_CHECK(len, 16);
5858 saved_offset = asn1->offset;
5860 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5862 "Shared Secret Data-A (SSD-A)");
5864 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5866 "Shared Secret Data-B (SSD-B)");
5868 asn1->offset += len;
5872 param_upd_count(ASN1_SCK *asn1, proto_tree *tree, guint len)
5878 EXACT_DATA_CHECK(len, 1);
5880 saved_offset = asn1->offset;
5882 asn1_int32_value_decode(asn1, 1, &value);
5886 case 0: str = "Not used"; break;
5887 case 1: str = "Update COUNT"; break;
5889 if ((value >= 2) && (value <= 223)) { str = "Reserved, treat as Update COUNT"; }
5890 else { str = "Reserved for protocol extension, treat as Update COUNT"; }
5894 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5895 saved_offset, asn1->offset - saved_offset,
5901 param_sme_key(ASN1_SCK *asn1, proto_tree *tree, guint len)
5905 EXACT_DATA_CHECK(len, 8);
5907 saved_offset = asn1->offset;
5909 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5911 "Signaling Message Encryption Key (SMEKEY)");
5913 asn1->offset += len;
5917 param_rand_ssd(ASN1_SCK *asn1, proto_tree *tree, guint len)
5921 EXACT_DATA_CHECK(len, 7);
5923 saved_offset = asn1->offset;
5925 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5927 "56-bit random number used as input to the CAVE algorithm for generating Shared Secret Data");
5929 asn1->offset += len;
5933 param_setup_result(ASN1_SCK *asn1, proto_tree *tree, guint len)
5939 saved_offset = asn1->offset;
5941 asn1_int32_value_decode(asn1, 1, &value);
5945 case 0: str = "Not used"; break;
5946 case 1: str = "Unsuccessful"; break;
5947 case 2: str = "Successful"; break;
5949 str = "Reserved, treat as Unsuccessful";
5953 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5954 saved_offset, asn1->offset - saved_offset,
5957 EXTRANEOUS_DATA_CHECK(len, 1);
5961 param_randc(ASN1_SCK *asn1, proto_tree *tree, guint len)
5965 saved_offset = asn1->offset;
5967 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
5969 "The 8 most significant bits of the 32-bit Random Variable used to compute the Authentication Response");
5973 EXTRANEOUS_DATA_CHECK(len, 1);
5977 param_ext_mscid(ASN1_SCK *asn1, proto_tree *tree, guint len)
5983 EXACT_DATA_CHECK(len, 4);
5985 saved_offset = asn1->offset;
5987 asn1_int32_value_decode(asn1, 1, &type);
5991 case 0: str = "Not specified"; break;
5992 case 1: str = "Serving MSC"; break;
5993 case 2: str = "Home MSC"; break;
5994 case 3: str = "Gateway MSC"; break;
5995 case 4: str = "HLR"; break;
5996 case 5: str = "VLR"; break;
5997 case 6: str = "EIR (reserved)"; break;
5998 case 7: str = "AC"; break;
5999 case 8: str = "Border MSC"; break;
6000 case 9: str = "Originating MSC"; break;
6002 if ((type >= 10) && (type <= 223)) { str = "Reserved, treat as Not specified"; }
6003 else { str = "Reserved for protocol extension, treat as Not specified"; }
6007 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6008 saved_offset, asn1->offset - saved_offset,
6013 param_mscid(asn1, tree, len-1);
6017 param_sub_addr(ASN1_SCK *asn1, proto_tree *tree, guint len)
6023 saved_offset = asn1->offset;
6024 asn1_int32_value_decode(asn1, 1, &value);
6026 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
6027 proto_tree_add_text(tree, asn1->tvb,
6028 saved_offset, asn1->offset - saved_offset,
6032 switch ((value & 0x70) >> 4)
6034 case 0x00: str = "NSAP (CCITT Rec. X.213 or ISO 8348 AD2)"; break;
6035 case 0x02: str = "User specified"; break;
6041 my_decode_bitfield_value(bigbuf, value, 0x70, 8);
6042 proto_tree_add_text(tree, asn1->tvb,
6043 saved_offset, asn1->offset - saved_offset,
6044 "%s : Type of Subaddress %s",
6047 switch ((value & 0x08) >> 3)
6049 case 0x00: str = "Even number of subaddress signals follow"; break;
6050 case 0x01: str = "Odd number of subaddress signals follow"; break;
6053 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
6054 proto_tree_add_text(tree, asn1->tvb,
6055 saved_offset, asn1->offset - saved_offset,
6059 proto_tree_add_text(tree, asn1->tvb,
6060 asn1->offset, len - 1,
6063 asn1->offset += len - 1;
6067 param_digits(ASN1_SCK *asn1, proto_tree *tree, guint len)
6069 gint32 value, b1, b2, b3, b4, enc, plan;
6073 proto_tree *subtree;
6076 SHORT_DATA_CHECK(len, 4);
6078 saved_offset = asn1->offset;
6079 asn1_int32_value_decode(asn1, 1, &value);
6083 case 0: str = "Not used"; break;
6084 case 1: str = "Dialed Numer or Called Party Number"; break;
6085 case 2: str = "Calling Party Number"; break;
6086 case 3: str = "Caller Interaction (Not used)"; break;
6087 case 4: str = "Routing Number"; break;
6088 case 5: str = "Billing Number"; break;
6089 case 6: str = "Destination Number"; break;
6090 case 7: str = "LATA (Not used)"; break;
6091 case 8: str = "Carrier"; break;
6092 case 13: str = "ESRD"; break;
6099 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6100 saved_offset, asn1->offset - saved_offset,
6101 "Type of Digits %d: %s",
6104 subtree = proto_item_add_subtree(item, ett_natnum);
6106 saved_offset = asn1->offset;
6107 asn1_int32_value_decode(asn1, 1, &value);
6109 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
6110 proto_tree_add_text(subtree, asn1->tvb,
6111 saved_offset, asn1->offset - saved_offset,
6115 switch ((value & 0x30) >> 4)
6117 case 0x00: str = "User provided, not screened"; break;
6118 case 0x01: str = "User provided, screening passed"; break;
6119 case 0x02: str = "User provided, screening failed"; break;
6120 case 0x03: str = "Network provided"; break;
6123 my_decode_bitfield_value(bigbuf, value, 0x30, 8);
6124 proto_tree_add_text(subtree, asn1->tvb,
6125 saved_offset, asn1->offset - saved_offset,
6129 proto_tree_add_text(subtree, asn1->tvb,
6130 saved_offset, asn1->offset - saved_offset,
6131 ".... %d... : Reserved",
6132 (value & 0x08) >> 3);
6134 proto_tree_add_text(subtree, asn1->tvb,
6135 saved_offset, asn1->offset - saved_offset,
6136 ".... .%d.. : Number is %savailable",
6137 (value & 0x04) >> 2, (value & 0x04) ? "not " : "");
6139 proto_tree_add_text(subtree, asn1->tvb,
6140 saved_offset, asn1->offset - saved_offset,
6141 ".... ..%d. : Presentation %s",
6142 (value & 0x02) >> 1, (value & 0x02) ? "Restricted" : "Allowed");
6144 proto_tree_add_text(subtree, asn1->tvb,
6145 saved_offset, asn1->offset - saved_offset,
6147 value & 0x01, (value & 0x01) ? "International" : "National");
6149 saved_offset = asn1->offset;
6150 asn1_int32_value_decode(asn1, 1, &value);
6152 plan = (value & 0xf0) >> 4;
6155 case 0x00: str = "Unknown or not applicable"; break;
6156 case 0x01: str = "ISDN Numbering (Not used)"; break;
6157 case 0x02: str = "Telephony Numbering (ITU-T Rec. E.164, E.163)"; break;
6158 case 0x03: str = "Data Numbering (ITU-T Rec. X.121)(Not used)"; break;
6159 case 0x04: str = "Telex Numbering (ITU-T Rec. F.69)(Not used)"; break;
6160 case 0x05: str = "Maritime Mobile Numbering (Not used)"; break;
6161 case 0x06: str = "Land Mobile Numbering (ITU-T Rec. E.212)"; break;
6162 case 0x07: str = "Private Numbering Plan (service provider defined)"; break;
6163 case 0x0d: str = "ANSI SS7 Point Code (PC) and Subsystem Number (SSN)"; break;
6164 case 0x0e: str = "Internet Protocol (IP) Address"; break;
6165 case 0x0f: str = "Reserved for extension"; break;
6171 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
6172 proto_tree_add_text(tree, asn1->tvb,
6173 saved_offset, asn1->offset - saved_offset,
6174 "%s : Numbering Plan, %s",
6180 case 0x00: str = "Not used"; break;
6181 case 0x01: str = "BCD"; break;
6182 case 0x02: str = "IA5"; break;
6183 case 0x03: str = "Octet String"; break;
6189 my_decode_bitfield_value(bigbuf, value, 0x0f, 8);
6190 proto_tree_add_text(tree, asn1->tvb,
6191 saved_offset, asn1->offset - saved_offset,
6192 "%s : Encoding, %s",
6195 saved_offset = asn1->offset;
6199 asn1_int32_value_decode(asn1, 1, &b1);
6200 asn1_int32_value_decode(asn1, 1, &b2);
6201 asn1_int32_value_decode(asn1, 1, &b3);
6202 asn1_int32_value_decode(asn1, 1, &b4);
6204 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6205 saved_offset, asn1->offset - saved_offset,
6206 "Point Code %d-%d-%d SSN %d",
6209 else if (plan == 0x0e)
6211 asn1_int32_value_decode(asn1, 1, &b1);
6212 asn1_int32_value_decode(asn1, 1, &b2);
6213 asn1_int32_value_decode(asn1, 1, &b3);
6214 asn1_int32_value_decode(asn1, 1, &b4);
6216 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6217 saved_offset, asn1->offset - saved_offset,
6218 "IP Address %d.%d.%d.%d",
6223 asn1_int32_value_decode(asn1, 1, &value);
6225 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6226 saved_offset, asn1->offset - saved_offset,
6227 "Number of Digits, %d",
6232 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6233 asn1->offset, value,
6236 asn1->offset += value;
6238 else if (enc == 0x01)
6240 saved_offset = asn1->offset;
6241 asn1_string_value_decode(asn1, (value+1)/2, &poctets);
6243 my_dgt_tbcd_unpack(bigbuf, poctets, (value+1)/2, &Dgt_tbcd);
6246 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6247 saved_offset, (value+1)/2,
6255 param_esn(ASN1_SCK *asn1, proto_tree *tree, guint len)
6260 EXACT_DATA_CHECK(len, 4);
6262 saved_offset = asn1->offset;
6264 asn1_int32_value_decode(asn1, 4, &value);
6266 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6267 saved_offset, asn1->offset - saved_offset,
6273 param_sms_noti(ASN1_SCK *asn1, proto_tree *tree, guint len)
6279 saved_offset = asn1->offset;
6281 asn1_int32_value_decode(asn1, 1, &value);
6285 case 0: str = "Not used"; break;
6286 case 1: str = "Notify when available"; break;
6287 case 2: str = "Do not notify when available"; break;
6289 if ((value >= 3) && (value <= 127)) { str = "Reserved, treat as Notify when available"; }
6290 else if ((value >= 128) && (value <= 223)) { str = "Reserved, treat as Do not notify when available"; }
6291 else { str = "Reserved for protocol extension"; }
6295 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6296 saved_offset, asn1->offset - saved_offset,
6301 EXTRANEOUS_DATA_CHECK(len, 1);
6305 param_sms_orig_restric(ASN1_SCK *asn1, proto_tree *tree, guint len)
6311 saved_offset = asn1->offset;
6313 asn1_int32_value_decode(asn1, 1, &value);
6315 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
6316 proto_tree_add_text(tree, asn1->tvb,
6317 saved_offset, asn1->offset - saved_offset,
6321 switch (value & 0x08)
6323 case 0x00: str = "No effect"; break;
6325 str = "Force indirect";
6329 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
6330 proto_tree_add_text(tree, asn1->tvb,
6331 saved_offset, asn1->offset - saved_offset,
6332 "%s : Force Message Center, %s",
6335 switch (value & 0x04)
6337 case 0x00: str = "Block direct"; break;
6339 str = "Allow direct";
6343 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
6344 proto_tree_add_text(tree, asn1->tvb,
6345 saved_offset, asn1->offset - saved_offset,
6349 switch (value & 0x03)
6351 case 0x00: str = "Block all"; break;
6352 case 0x02: str = "Allow specific"; break;
6353 case 0x03: str = "Allow all"; break;
6359 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
6360 proto_tree_add_text(tree, asn1->tvb,
6361 saved_offset, asn1->offset - saved_offset,
6365 EXTRANEOUS_DATA_CHECK(len, 1);
6369 param_seizure(ASN1_SCK *asn1, proto_tree *tree, guint len)
6375 saved_offset = asn1->offset;
6377 asn1_int32_value_decode(asn1, 1, &value);
6381 case 0: str = "Unspecified"; break;
6382 case 1: str = "Loopback"; break;
6384 if ((value >= 2) && (value <= 223)) { str = "Reserved"; }
6385 else { str = "Reserved for protocol extension"; }
6389 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6390 saved_offset, asn1->offset - saved_offset,
6393 EXTRANEOUS_DATA_CHECK(len, 1);
6397 param_sms_tele(ASN1_SCK *asn1, proto_tree *tree, guint len)
6403 ansi_map_sms_tele_id = -1;
6405 SHORT_DATA_CHECK(len, 2);
6407 saved_offset = asn1->offset;
6409 asn1_int32_value_decode(asn1, 2, &value);
6411 str = match_strval(value, ansi_tele_strings);
6416 case 0: str = "Not used"; break;
6418 if ((value >= 2) && (value <= 4095)) { str = "Reserved for assignment by TIA/EIA-41"; }
6419 else if ((value >= 4100) && (value <= 32512)) { str = "Reserved for assignment by TIA/EIA-41"; }
6420 else if ((value >= 32514) && (value <= 32639)) { str = "Reserved for assignment by this Standard for TDMA MS-based SMEs."; }
6421 else if ((value >= 32640) && (value <= 32767)) { str = "Reserved for carrier specific teleservices for TDMA MS-based SMEs."; }
6422 else if ((value >= 32768) && (value <= 49151)) { str = "Reserved for node specific teleservices."; }
6423 else if ((value >= 49152) && (value <= 65535)) { str = "Reserved for carrier specific teleservices."; }
6424 else { str = "Unknown teleservice ID"; }
6429 ansi_map_sms_tele_id = value;
6431 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6432 saved_offset, asn1->offset - saved_offset,
6437 EXTRANEOUS_DATA_CHECK(len, 2);
6441 param_sms_term_restric(ASN1_SCK *asn1, proto_tree *tree, guint len)
6447 saved_offset = asn1->offset;
6449 asn1_int32_value_decode(asn1, 1, &value);
6451 my_decode_bitfield_value(bigbuf, value, 0xf8, 8);
6452 proto_tree_add_text(tree, asn1->tvb,
6453 saved_offset, asn1->offset - saved_offset,
6457 switch (value & 0x04)
6459 case 0x00: str = "Block messages charged to destination"; break;
6461 str = "Allow messages charged to destination";
6465 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
6466 proto_tree_add_text(tree, asn1->tvb,
6467 saved_offset, asn1->offset - saved_offset,
6468 "%s : Reverse Charges, %s",
6471 switch (value & 0x03)
6473 case 0x00: str = "Block all"; break;
6474 case 0x02: str = "Allow specific"; break;
6475 case 0x03: str = "Allow all"; break;
6481 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
6482 proto_tree_add_text(tree, asn1->tvb,
6483 saved_offset, asn1->offset - saved_offset,
6487 EXTRANEOUS_DATA_CHECK(len, 1);
6491 param_sms_msg_count(ASN1_SCK *asn1, proto_tree *tree, guint len)
6497 saved_offset = asn1->offset;
6499 asn1_int32_value_decode(asn1, 1, &value);
6503 case 0: str = "No more pending SMS messages"; break;
6505 sprintf(bigbuf, "%d pending SMS messages", value);
6510 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6511 saved_offset, asn1->offset - saved_offset,
6514 EXTRANEOUS_DATA_CHECK(len, 1);
6518 param_qos_pri(ASN1_SCK *asn1, proto_tree *tree, guint len)
6520 gint32 value, temp_int;
6524 saved_offset = asn1->offset;
6526 asn1_int32_value_decode(asn1, 1, &value);
6528 temp_int = (value & 0xf0) >> 4;
6529 if ((temp_int < 0) || (temp_int >= (gint) NUM_QOS_PRI_STR))
6535 str = qos_pri_str[temp_int];
6538 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
6539 proto_tree_add_text(tree, asn1->tvb,
6540 saved_offset, asn1->offset - saved_offset,
6541 "%s : Assured Priority, %s",
6545 temp_int = value & 0x0f;
6546 if ((temp_int < 0) || (temp_int >= (gint) NUM_QOS_PRI_STR))
6552 str = qos_pri_str[temp_int];
6555 my_decode_bitfield_value(bigbuf, value, 0x0f, 8);
6556 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6557 saved_offset, asn1->offset - saved_offset,
6558 "%s : Non-Assured Priority, %s",
6562 EXTRANEOUS_DATA_CHECK(len, 1);
6566 param_calling_party_cat(ASN1_SCK *asn1, proto_tree *tree, guint len)
6571 EXACT_DATA_CHECK(len, 1);
6573 saved_offset = asn1->offset;
6575 asn1_int32_value_decode(asn1, 1, &value);
6577 proto_tree_add_text(tree, asn1->tvb,
6578 saved_offset, asn1->offset - saved_offset,
6579 "Calling Party's Category, Refer to ITU-T Q.763 (Signalling System No. 7 ISDN user part formats and codes) for encoding of this parameter");
6583 param_cdma2000_ho_ivk_ios(ASN1_SCK *asn1, proto_tree *tree, guint len)
6586 proto_tree_add_text(tree, asn1->tvb,
6588 "IOS A1 Element Handoff Invoke Information");
6590 asn1->offset += len;
6594 param_cdma2000_ho_rsp_ios(ASN1_SCK *asn1, proto_tree *tree, guint len)
6597 proto_tree_add_text(tree, asn1->tvb,
6599 "IOS A1 Element Handoff Response Information");
6601 asn1->offset += len;
6605 param_msid_usage(ASN1_SCK *asn1, proto_tree *tree, guint len)
6611 saved_offset = asn1->offset;
6613 asn1_int32_value_decode(asn1, 1, &value);
6615 my_decode_bitfield_value(bigbuf, value, 0xfc, 8);
6616 proto_tree_add_text(tree, asn1->tvb,
6617 saved_offset, asn1->offset - saved_offset,
6621 switch (value & 0x03)
6623 case 0: str = "Not used"; break;
6624 case 1: str = "MIN last used"; break;
6625 case 2: str = "IMSI last used"; break;
6626 case 3: str = "Reserved"; break;
6629 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
6630 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6631 saved_offset, asn1->offset - saved_offset,
6636 EXTRANEOUS_DATA_CHECK(len, 1);
6640 param_new_min_ext(ASN1_SCK *asn1, proto_tree *tree, guint len)
6646 EXACT_DATA_CHECK(len, 3);
6648 saved_offset = asn1->offset;
6650 asn1_int32_value_decode(asn1, 1, &value);
6652 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
6653 proto_tree_add_text(tree, asn1->tvb,
6654 saved_offset, asn1->offset - saved_offset,
6655 "%s : MCC_M (MSB), see CDMA",
6658 my_decode_bitfield_value(bigbuf, value, 0x0e, 8);
6659 proto_tree_add_text(tree, asn1->tvb,
6660 saved_offset, asn1->offset - saved_offset,
6661 "%s : IMSI_M_ADDR_NUM, see CDMA",
6664 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
6665 proto_tree_add_text(tree, asn1->tvb,
6666 saved_offset, asn1->offset - saved_offset,
6667 "%s : IMSI_M_CLASS, see CDMA",
6670 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
6671 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6672 saved_offset, asn1->offset - saved_offset,
6677 bigbuf[0] = Dgt_tbcd.out[(value & 0xf0) >> 4];
6679 saved_offset = asn1->offset;
6681 asn1_int32_value_decode(asn1, 1, &value);
6683 bigbuf[1] = Dgt_tbcd.out[value & 0x0f];
6684 bigbuf[2] = Dgt_tbcd.out[(value & 0xf0) >> 4];
6687 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6688 saved_offset, asn1->offset - saved_offset,
6689 "MCC_M, %s, see CDMA",
6692 saved_offset = asn1->offset;
6694 asn1_int32_value_decode(asn1, 1, &value);
6696 bigbuf[0] = Dgt_tbcd.out[value & 0x0f];
6697 bigbuf[1] = Dgt_tbcd.out[(value & 0xf0) >> 4];
6700 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6701 saved_offset, asn1->offset - saved_offset,
6702 "IMSI_11_12, %s, see CDMA",
6707 param_dtx_ind(ASN1_SCK *asn1, proto_tree *tree, guint len)
6713 saved_offset = asn1->offset;
6715 asn1_int32_value_decode(asn1, 1, &value);
6717 my_decode_bitfield_value(bigbuf, value, 0xfe, 8);
6718 proto_tree_add_text(tree, asn1->tvb,
6719 saved_offset, asn1->offset - saved_offset,
6723 switch (value & 0x01)
6725 case 0: str = "Discontinuous Transmission mode is not active"; break;
6726 case 1: str = "Discontinuous Transmission mode is active"; break;
6729 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
6730 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6731 saved_offset, asn1->offset - saved_offset,
6736 EXTRANEOUS_DATA_CHECK(len, 1);
6740 param_cdma_mob_cap(ASN1_SCK *asn1, proto_tree *tree, guint len)
6746 saved_offset = asn1->offset;
6748 asn1_int32_value_decode(asn1, 1, &value);
6750 my_decode_bitfield_value(bigbuf, value, 0xfe, 8);
6751 proto_tree_add_text(tree, asn1->tvb,
6752 saved_offset, asn1->offset - saved_offset,
6756 switch (value & 0x01)
6758 case 0: str = "No MS-initiated position determination"; break;
6759 case 1: str = "MS-initiated position determination"; break;
6762 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
6763 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6764 saved_offset, asn1->offset - saved_offset,
6769 EXTRANEOUS_DATA_CHECK(len, 1);
6773 param_gen_time(ASN1_SCK *asn1, proto_tree *tree, guint len)
6779 SHORT_DATA_CHECK(len, 6);
6781 saved_offset = asn1->offset;
6783 asn1_int32_value_decode(asn1, 1, &value);
6785 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6786 saved_offset, asn1->offset - saved_offset,
6790 saved_offset = asn1->offset;
6792 asn1_int32_value_decode(asn1, 1, &value);
6794 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6795 saved_offset, asn1->offset - saved_offset,
6799 saved_offset = asn1->offset;
6801 asn1_int32_value_decode(asn1, 1, &value);
6803 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6804 saved_offset, asn1->offset - saved_offset,
6808 saved_offset = asn1->offset;
6810 asn1_int32_value_decode(asn1, 3, &value);
6812 h = value / (3600 * 10);
6813 m = (value - (h * (3600 * 10))) / (60 * 10);
6814 s = (value - (h * (3600 * 10)) - (m * (60 * 10))) / 10;
6815 ts = (value - (h * (3600 * 10)) - (m * (60 * 10)) - (s * 10));
6817 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6818 saved_offset, asn1->offset - saved_offset,
6819 "Time of day (UTC) (in tenths of seconds - 1), %d (%d:%d:%d.%d)",
6826 EXTRANEOUS_DATA_CHECK(len, 6);
6830 param_geo_pos(ASN1_SCK *asn1, proto_tree *tree, guint len)
6834 saved_offset = asn1->offset;
6836 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6838 "Calling Geodetic Location (CGL), see T1.628 CallingGeodeticLocation TCAP parameter for encoding");
6842 param_mob_call_status(ASN1_SCK *asn1, proto_tree *tree, guint len)
6848 saved_offset = asn1->offset;
6850 asn1_int32_value_decode(asn1, 1, &value);
6852 auth = (value & 0xf0) >> 4;
6855 case 0: str = "Authorization not performed"; break;
6856 case 1: str = "Authorization successful"; break;
6857 case 2: str = "Invalid Electronic Serial Number (ESN)"; break;
6858 case 3: str = "Unassigned Directory Number (DN)"; break;
6859 case 4: str = "Duplicate Unit"; break;
6860 case 5: str = "Delinquent Account"; break;
6861 case 6: str = "Stolen Unit"; break;
6862 case 7: str = "Not authorized for MSC"; break;
6863 case 8: str = "Unspecified"; break;
6865 str = "Reserved, treat as Authorization not performed";
6869 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
6870 proto_tree_add_text(tree, asn1->tvb,
6871 saved_offset, asn1->offset - saved_offset,
6872 "%s : Authorization, %s",
6876 auth = value & 0x0f;
6879 case 0: str = "Authentication not performed. Authentication has not yet occurred or the MS is not capable of authentication"; break;
6880 case 1: str = "Authentication successful. Authentication has successfully occurred on the MS"; break;
6881 case 2: str = "Authentication failure. An authentication failure has occurred on the MS"; break;
6883 str = "Reserved, treat as Authentication not performed";
6887 my_decode_bitfield_value(bigbuf, value, 0x0f, 8);
6888 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
6889 saved_offset, asn1->offset - saved_offset,
6890 "%s : Authentication, %s",
6894 EXTRANEOUS_DATA_CHECK(len, 1);
6898 param_pos_req_type(ASN1_SCK *asn1, proto_tree *tree, guint len)
6904 saved_offset = asn1->offset;
6906 asn1_int32_value_decode(asn1, 1, &value);
6910 case 0: str = "Not used"; break;
6911 case 1: str = "Initial position. Return updated position only if initial position is unavailable."; break;
6912 case 2: str = "Return the updated position"; break;
6913 case 3: str = "Return the updated or last known position"; break;
6914 case 4: str = "Reserved for LSP interface. Treat as Not used"; break;
6916 if ((value >= 5) && (value <= 95)) { str = "Reserved, treat as Initial position"; }
6917 else { str = "Reserved for protocol extension, treat as Initial position"; }
6921 proto_tree_add_text(tree, asn1->tvb,
6922 saved_offset, asn1->offset - saved_offset,
6923 "Position Request Type, %s",
6926 EXTRANEOUS_DATA_CHECK(len, 1);
6930 param_pos_result(ASN1_SCK *asn1, proto_tree *tree, guint len)
6936 saved_offset = asn1->offset;
6938 asn1_int32_value_decode(asn1, 1, &value);
6942 case 0: str = "Not used"; break;
6943 case 1: str = "Initial position returned"; break;
6944 case 2: str = "Updated position returned"; break;
6945 case 3: str = "Last known position returned"; break;
6946 case 4: str = "Requested position is not available"; break;
6947 case 5: str = "Caller disconnected. No call in progress for caller identified"; break;
6948 case 6: str = "Caller has handed-off. Position is unavailable due to a hand-off (e.g. handoff to a position incapable system)"; break;
6949 case 7: str = "Identified MS is inactive or has roamed to another system"; break;
6950 case 8: str = "Unresponsive"; break;
6951 case 9: str = "Identified MS is responsive, but refused position request"; break;
6952 case 10: str = "System Failure"; break;
6953 case 11: str = "MSID is not known"; break;
6954 case 12: str = "Callback number is not known"; break;
6955 case 13: str = "Improper request (e.g. invalid channel information, invalid ESN)"; break;
6956 case 14: str = "Mobile channel information returned"; break;
6957 case 15: str = "Signal not detected"; break;
6958 case 16: str = "PDE Timeout"; break;
6959 case 17: str = "Position pending"; break;
6960 case 18: str = "TDMA MAHO Information Returned"; break;
6961 case 19: str = "TDMA MAHO Information is not available"; break;
6963 if ((value >= 20) && (value <= 223)) { str = "Reserved, treat as Not used"; }
6964 else { str = "Reserved for protocol extension, treat as Not used"; }
6968 proto_tree_add_text(tree, asn1->tvb,
6969 saved_offset, asn1->offset - saved_offset,
6970 "Position Result, %s",
6973 EXTRANEOUS_DATA_CHECK(len, 1);
6977 param_pos_source(ASN1_SCK *asn1, proto_tree *tree, guint len)
6983 saved_offset = asn1->offset;
6985 asn1_int32_value_decode(asn1, 1, &value);
6989 case 0: str = "Not used"; break;
6990 case 1: str = "Network Unspecified"; break;
6991 case 2: str = "Network AOA (Angle of Arrival)"; break;
6992 case 3: str = "Network TOA (Time of Arrival)"; break;
6993 case 4: str = "Network TDOA (Time Difference of Arrival)"; break;
6994 case 5: str = "Network RF Fingerprinting"; break;
6995 case 6: str = "Network Cell/Sector"; break;
6996 case 7: str = "Network Cell/Sector with Timing"; break;
6997 case 16: str = "Handset Unspecified"; break;
6998 case 17: str = "Handset GPS"; break;
6999 case 18: str = "Handset AGPS (Assisted GPS)"; break;
7000 case 19: str = "Handset EOTD (Enhanced Observed Time Difference)"; break;
7001 case 20: str = "Handset AFLT (Advanced Forward Link Trilateration)"; break;
7002 case 21: str = "Handset EFLT (Enhanced Forward Link Trilateration)"; break;
7004 if ((value >= 8) && (value <= 15)) { str = "Reserved, treat as Network Unspecified"; }
7005 else if ((value >= 22) && (value <= 31)) { str = "Reserved, treat as Handset Unspecified"; }
7006 else { str = "Reserved for protocol extension, treat as Not used"; }
7010 proto_tree_add_text(tree, asn1->tvb,
7011 saved_offset, asn1->offset - saved_offset,
7012 "Position Source, %s",
7015 EXTRANEOUS_DATA_CHECK(len, 1);
7019 param_acg_encounter(ASN1_SCK *asn1, proto_tree *tree, guint len)
7025 EXACT_DATA_CHECK(len, 1);
7027 saved_offset = asn1->offset;
7029 asn1_int32_value_decode(asn1, 1, &value);
7031 switch ((value & 0xc0) >> 6)
7033 case 0: str = "Not used"; break;
7034 case 1: str = "Service Management System Initiated control encountered"; break;
7035 case 2: str = "SCF Overload control encountered"; break;
7036 case 3: str = "Reserved, treat as Not used"; break;
7039 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
7040 proto_tree_add_text(tree, asn1->tvb,
7041 saved_offset, asn1->offset - saved_offset,
7042 "%s : Control Type, %s",
7046 switch (value & 0x3f)
7048 case 0: str = "PC_SSN"; break;
7049 case 1: str = "1-digit control"; break;
7050 case 2: str = "2-digit control"; break;
7051 case 3: str = "3-digit control"; break;
7052 case 4: str = "4-digit control"; break;
7053 case 5: str = "5-digit control"; break;
7054 case 6: str = "6-digit control"; break;
7055 case 7: str = "7-digit control"; break;
7056 case 8: str = "8-digit control"; break;
7057 case 9: str = "9-digit control"; break;
7058 case 10: str = "10-digit control"; break;
7059 case 11: str = "11-digit control"; break;
7060 case 12: str = "12-digit control"; break;
7061 case 13: str = "13-digit control"; break;
7062 case 14: str = "14-digit control"; break;
7063 case 15: str = "15-digit control"; break;
7065 str = "Reserved, treat as 15-digit control";
7069 my_decode_bitfield_value(bigbuf, value, 0x3f, 8);
7070 proto_tree_add_text(tree, asn1->tvb,
7071 saved_offset, asn1->offset - saved_offset,
7078 param_ctrl_type(ASN1_SCK *asn1, proto_tree *tree, guint len)
7084 EXACT_DATA_CHECK(len, 1);
7086 saved_offset = asn1->offset;
7088 asn1_int32_value_decode(asn1, 1, &value);
7090 switch ((value & 0xc0) >> 6)
7092 case 0: str = "Not used"; break;
7093 case 1: str = "Service Management System Initiated control"; break;
7094 case 2: str = "SCF Overload control"; break;
7095 case 3: str = "Reserved, treat as Not used"; break;
7098 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
7099 proto_tree_add_text(tree, asn1->tvb,
7100 saved_offset, asn1->offset - saved_offset,
7101 "%s : Control Type, %s",
7105 switch (value & 0x3f)
7107 case 0: str = "PC_SSN"; break;
7108 case 1: str = "1-digit control"; break;
7109 case 2: str = "2-digit control"; break;
7110 case 3: str = "3-digit control"; break;
7111 case 4: str = "4-digit control"; break;
7112 case 5: str = "5-digit control"; break;
7113 case 6: str = "6-digit control"; break;
7114 case 7: str = "7-digit control"; break;
7115 case 8: str = "8-digit control"; break;
7116 case 9: str = "9-digit control"; break;
7117 case 10: str = "10-digit control"; break;
7118 case 11: str = "11-digit control"; break;
7119 case 12: str = "12-digit control"; break;
7120 case 13: str = "13-digit control"; break;
7121 case 14: str = "14-digit control"; break;
7122 case 15: str = "15-digit control"; break;
7124 str = "Reserved, treat as 15-digit control";
7128 my_decode_bitfield_value(bigbuf, value, 0x3f, 8);
7129 proto_tree_add_text(tree, asn1->tvb,
7130 saved_offset, asn1->offset - saved_offset,
7137 param_gap_duration(ASN1_SCK *asn1, proto_tree *tree, guint len)
7143 EXACT_DATA_CHECK(len, 1);
7145 saved_offset = asn1->offset;
7147 asn1_int32_value_decode(asn1, 1, &value);
7151 case 0: str = "Not used"; break;
7152 case 1: str = "1 second"; break;
7153 case 2: str = "2 seconds"; break;
7154 case 3: str = "4 seconds"; break;
7155 case 4: str = "8 seconds"; break;
7156 case 5: str = "16 seconds"; break;
7157 case 6: str = "32 seconds"; break;
7158 case 7: str = "64 seconds"; break;
7159 case 8: str = "128 seconds"; break;
7160 case 9: str = "256 seconds"; break;
7161 case 10: str = "512 seconds"; break;
7162 case 11: str = "1024 seconds"; break;
7163 case 12: str = "2048 seconds"; break;
7164 case 13: str = "Infinity"; break;
7166 str = "Reserved, treat as Not used";
7170 proto_tree_add_text(tree, asn1->tvb,
7171 saved_offset, asn1->offset - saved_offset,
7176 param_scf_overload_gap_int(ASN1_SCK *asn1, proto_tree *tree, guint len)
7182 EXACT_DATA_CHECK(len, 1);
7184 saved_offset = asn1->offset;
7186 asn1_int32_value_decode(asn1, 1, &value);
7190 case 0: str = "0 seconds"; break;
7191 case 1: str = "3 seconds"; break;
7192 case 2: str = "4 seconds"; break;
7193 case 3: str = "6 seconds"; break;
7194 case 4: str = "8 seconds"; break;
7195 case 5: str = "11 seconds"; break;
7196 case 6: str = "16 seconds"; break;
7197 case 7: str = "22 seconds"; break;
7198 case 8: str = "30 seconds"; break;
7199 case 9: str = "42 seconds"; break;
7200 case 10: str = "58 seconds"; break;
7201 case 11: str = "81 seconds"; break;
7202 case 12: str = "112 seconds"; break;
7203 case 13: str = "156 seconds"; break;
7204 case 14: str = "217 seconds"; break;
7205 case 15: str = "300 seconds"; break;
7206 case 16: str = "Remove gap control"; break;
7207 case 17: str = "0.10 seconds"; break;
7208 case 18: str = "0.25 seconds"; break;
7209 case 19: str = "0.5 seconds"; break;
7210 case 20: str = "1 second"; break;
7211 case 21: str = "2 seconds"; break;
7213 str = "Reserved, treat as 0 seconds";
7217 proto_tree_add_text(tree, asn1->tvb,
7218 saved_offset, asn1->offset - saved_offset,
7223 param_tdma_time_align(ASN1_SCK *asn1, proto_tree *tree, guint len)
7228 saved_offset = asn1->offset;
7230 asn1_int32_value_decode(asn1, 1, &value);
7232 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
7233 proto_tree_add_text(tree, asn1->tvb,
7234 saved_offset, asn1->offset - saved_offset,
7239 my_decode_bitfield_value(bigbuf, value, 0x1f, 8);
7240 proto_tree_add_text(tree, asn1->tvb,
7241 saved_offset, asn1->offset - saved_offset,
7242 "%s : Time Alignment Offset (TA), %d",
7246 EXTRANEOUS_DATA_CHECK(len, 1);
7250 dump_rssi(ASN1_SCK *asn1, proto_tree *tree, gchar *leader)
7256 saved_offset = asn1->offset;
7258 asn1_int32_value_decode(asn1, 1, &value);
7260 switch ((value & 0xc0) >> 6)
7262 case 0: str = "800 MHz"; break;
7263 case 1: str = "1900 MHz"; break;
7269 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
7270 proto_tree_add_text(tree, asn1->tvb,
7271 saved_offset, asn1->offset - saved_offset,
7277 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
7278 proto_tree_add_text(tree, asn1->tvb,
7279 saved_offset, asn1->offset - saved_offset,
7283 my_decode_bitfield_value(bigbuf, value, 0x1f, 8);
7284 proto_tree_add_text(tree, asn1->tvb,
7285 saved_offset, asn1->offset - saved_offset,
7293 param_tdma_maho_cell_id(ASN1_SCK *asn1, proto_tree *tree, guint len)
7295 gint32 value, num_rssi, num_msc;
7296 guint saved_offset, orig_offset;
7299 SHORT_DATA_CHECK(len, 3);
7301 orig_offset = asn1->offset;
7303 dump_rssi(asn1, tree, "Serving Cell ");
7305 saved_offset = asn1->offset;
7307 asn1_int32_value_decode(asn1, 1, &num_rssi);
7309 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7310 saved_offset, asn1->offset - saved_offset,
7311 "Number of RSSI %d",
7314 for (i = 0; i < num_rssi; i++)
7316 if ((len - (asn1->offset - orig_offset)) < 3)
7318 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7319 asn1->offset, len - (asn1->offset - orig_offset),
7322 asn1->offset += len - (asn1->offset - orig_offset);
7326 dump_rssi(asn1, tree, "");
7328 saved_offset = asn1->offset;
7330 asn1_int32_value_decode(asn1, 2, &value);
7332 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7333 saved_offset, asn1->offset - saved_offset,
7334 "Measured Cell ID %d",
7338 saved_offset = asn1->offset;
7340 asn1_int32_value_decode(asn1, 1, &num_msc);
7342 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7343 saved_offset, asn1->offset - saved_offset,
7347 for (i = 0; i < num_msc; i++)
7349 if ((len - (asn1->offset - orig_offset)) < 4)
7351 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7352 asn1->offset, len - (asn1->offset - orig_offset),
7355 asn1->offset += len - (asn1->offset - orig_offset);
7359 param_mscid(asn1, tree, 3);
7361 saved_offset = asn1->offset;
7363 asn1_int32_value_decode(asn1, 1, &num_rssi);
7365 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7366 saved_offset, asn1->offset - saved_offset,
7367 "Number of RSSI %d",
7370 for (j = 0; j < num_rssi; j++)
7372 if ((len - (asn1->offset - orig_offset)) < 3)
7374 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7375 asn1->offset, len - (asn1->offset - orig_offset),
7378 asn1->offset += len - (asn1->offset - orig_offset);
7382 dump_rssi(asn1, tree, "");
7384 saved_offset = asn1->offset;
7386 asn1_int32_value_decode(asn1, 2, &value);
7388 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7389 saved_offset, asn1->offset - saved_offset,
7390 "Measured Cell ID %d",
7395 EXTRANEOUS_DATA_CHECK((len - (asn1->offset - orig_offset)), 0);
7399 param_tdma_maho_chan(ASN1_SCK *asn1, proto_tree *tree, guint len)
7401 gint32 value, num_rssi, num_msc;
7402 guint saved_offset, orig_offset;
7405 SHORT_DATA_CHECK(len, 3);
7407 orig_offset = asn1->offset;
7409 dump_rssi(asn1, tree, "Serving Cell ");
7411 saved_offset = asn1->offset;
7413 asn1_int32_value_decode(asn1, 1, &num_rssi);
7415 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7416 saved_offset, asn1->offset - saved_offset,
7417 "Number of RSSI %d",
7420 for (i = 0; i < num_rssi; i++)
7422 if ((len - (asn1->offset - orig_offset)) < 3)
7424 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7425 asn1->offset, len - (asn1->offset - orig_offset),
7428 asn1->offset += len - (asn1->offset - orig_offset);
7432 dump_rssi(asn1, tree, "");
7434 saved_offset = asn1->offset;
7436 asn1_int32_value_decode(asn1, 2, &value);
7438 my_decode_bitfield_value(bigbuf, value >> 8, 0xff, 8);
7439 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7441 "%s : Measured Channel (MSB), %d",
7443 (value & 0xffe0) >> 5);
7445 my_decode_bitfield_value(bigbuf, value & 0xff, 0xe0, 8);
7446 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7448 "%s : Measured Channel (LSB)",
7452 saved_offset = asn1->offset;
7454 asn1_int32_value_decode(asn1, 1, &num_msc);
7456 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7457 saved_offset, asn1->offset - saved_offset,
7461 for (i = 0; i < num_msc; i++)
7463 if ((len - (asn1->offset - orig_offset)) < 4)
7465 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7466 asn1->offset, len - (asn1->offset - orig_offset),
7469 asn1->offset += len - (asn1->offset - orig_offset);
7473 param_mscid(asn1, tree, 3);
7475 saved_offset = asn1->offset;
7477 asn1_int32_value_decode(asn1, 1, &num_rssi);
7479 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7480 saved_offset, asn1->offset - saved_offset,
7481 "Number of RSSI %d",
7484 for (j = 0; j < num_rssi; j++)
7486 if ((len - (asn1->offset - orig_offset)) < 3)
7488 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7489 asn1->offset, len - (asn1->offset - orig_offset),
7492 asn1->offset += len - (asn1->offset - orig_offset);
7496 dump_rssi(asn1, tree, "");
7498 saved_offset = asn1->offset;
7500 asn1_int32_value_decode(asn1, 2, &value);
7502 my_decode_bitfield_value(bigbuf, value >> 8, 0xff, 8);
7503 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7505 "%s : Measured Channel (MSB), %d",
7507 (value & 0xffe0) >> 5);
7509 my_decode_bitfield_value(bigbuf, value & 0xff, 0xe0, 8);
7510 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7512 "%s : Measured Channel (LSB)",
7517 EXTRANEOUS_DATA_CHECK((len - (asn1->offset - orig_offset)), 0);
7521 param_tdma_maho_req(ASN1_SCK *asn1, proto_tree *tree, guint len)
7527 EXACT_DATA_CHECK(len, 1);
7529 saved_offset = asn1->offset;
7531 asn1_int32_value_decode(asn1, 1, &value);
7535 case 0: str = "No MAHO information requested"; break;
7536 case 1: str = "MAHO information requested"; break;
7538 str = "Reserved, treat as No MAHO information requested";
7542 proto_tree_add_text(tree, asn1->tvb,
7543 saved_offset, asn1->offset - saved_offset,
7548 param_sm_gap_int(ASN1_SCK *asn1, proto_tree *tree, guint len)
7554 EXACT_DATA_CHECK(len, 1);
7556 saved_offset = asn1->offset;
7558 asn1_int32_value_decode(asn1, 1, &value);
7562 case 0: str = "Remove gap control"; break;
7563 case 1: str = "0 seconds"; break;
7564 case 2: str = "0.10 seconds"; break;
7565 case 3: str = "0.25 seconds"; break;
7566 case 4: str = "0.50 seconds"; break;
7567 case 5: str = "1 second"; break;
7568 case 6: str = "2 seconds"; break;
7569 case 7: str = "5 seconds"; break;
7570 case 8: str = "10 seconds"; break;
7571 case 9: str = "15 seconds"; break;
7572 case 10: str = "30 seconds"; break;
7573 case 11: str = "60 seconds"; break;
7574 case 12: str = "120 seconds"; break;
7575 case 13: str = "300 seconds"; break;
7576 case 14: str = "600 seconds"; break;
7577 case 15: str = "Stop all queries"; break;
7579 str = "Reserved, treat as Remove gap control";
7583 proto_tree_add_text(tree, asn1->tvb,
7584 saved_offset, asn1->offset - saved_offset,
7589 param_mob_cap(ASN1_SCK *asn1, proto_tree *tree, guint len)
7592 guint saved_offset, i;
7595 for (i=0; i < len; i++)
7597 saved_offset = asn1->offset;
7599 asn1_int32_value_decode(asn1, 1, &value);
7603 case 0: str = "Undefined Mobile Position Capabilities"; break;
7604 case 1: str = "CDMA None"; break;
7605 case 2: str = "CDMA Pilot Phase + GPS - MS shall be capable of supporting A-FLT and GPS for position determination"; break;
7606 case 3: str = "CDMA Pilot Phase Only - MS shall be capable of supporting A-FLT only for position determination"; break;
7607 case 4: str = "CDMA GPS Only - MS shall be capable of supporting GPS only for position determination"; break;
7608 case 51: str = "TDMA None. See TIA/EIA-136-740"; break;
7609 case 52: str = "TDMA MS-Based with Network Assistance SAMPS Supported. See TIA/EIA-136-740"; break;
7610 case 53: str = "TDMA MS-Assisted SAMPS Supported. See TIA/EIA-136-740"; break;
7611 case 54: str = "TDMA SAMPS Time Measurement Capability Supported. See TIA/EIA-136-740"; break;
7612 case 55: str = "TDMA MS-Based Stand-alone SAMPS Supported. See TIA/EIA-136-740"; break;
7613 case 101: str = "AMPS None"; break;
7614 case 102: str = "AMPS MS-based - MS shall be capable of autonomously determining the position without assistance from the network"; break;
7615 case 103: str = "AMPS assisted GPS - MS shall be capable of utilizing network assistance in providing GPS satellite measurements for position determination in the network or of utilizing network assistance in position determination in the MS"; break;
7617 if ((value >= 5) && (value <= 50)) { str = "Reserved for CDMA, treat as CDMA None"; }
7618 else if ((value >= 56) && (value <= 100)) { str = "Reserved for TDMA, treat as TDMA None"; }
7619 else if ((value >= 104) && (value <= 150)) { str = "Reserved for AMPS, treat as AMPS None"; }
7620 else if ((value >= 151) && (value <= 223)) { str = "Reserved, treat as Undefined"; }
7621 else { str = "Reserved for protocol extension, treat as Undefined"; }
7625 proto_tree_add_text(tree, asn1->tvb,
7626 saved_offset, asn1->offset - saved_offset,
7627 "Mobile Position Capability, %s",
7633 param_cdma_psmm_count(ASN1_SCK *asn1, proto_tree *tree, guint len)
7638 EXACT_DATA_CHECK(len, 1);
7640 saved_offset = asn1->offset;
7642 asn1_int32_value_decode(asn1, 1, &value);
7644 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7645 saved_offset, asn1->offset - saved_offset,
7646 "Number of CDMA Pilot Strength Measurements to return, %d",
7651 param_cdma_sowd2(ASN1_SCK *asn1, proto_tree *tree, guint len)
7657 SHORT_DATA_CHECK(len, 5);
7659 saved_offset = asn1->offset;
7661 asn1_int32_value_decode(asn1, 2, &value);
7663 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7664 saved_offset, asn1->offset - saved_offset,
7665 "CDMA Serving One Way Delay, %d",
7668 saved_offset = asn1->offset;
7670 asn1_int32_value_decode(asn1, 1, &value);
7672 my_decode_bitfield_value(bigbuf, value, 0xfc, 8);
7673 proto_tree_add_text(tree, asn1->tvb,
7674 saved_offset, asn1->offset - saved_offset,
7678 switch (value & 0x03)
7680 case 0: str = "100 nsec"; break;
7681 case 1: str = "50 nsec"; break;
7682 case 2: str = "1/16 CDMA PN Chip"; break;
7683 case 3: str = "Reserved"; break;
7686 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
7687 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7688 saved_offset, asn1->offset - saved_offset,
7689 "%s : Resolution, %s",
7693 saved_offset = asn1->offset;
7695 asn1_int32_value_decode(asn1, 2, &value);
7697 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7698 saved_offset, asn1->offset - saved_offset,
7699 "Serving One Way Delay TimeStamp, %d",
7702 EXTRANEOUS_DATA_CHECK(len, 5);
7706 param_sms_charge_ind(ASN1_SCK *asn1, proto_tree *tree, guint len)
7712 saved_offset = asn1->offset;
7714 asn1_int32_value_decode(asn1, 1, &value);
7718 case 0: str = "Not used"; break;
7719 case 1: str = "No charge"; break;
7720 case 2: str = "Charge original originator"; break;
7721 case 3: str = "Charge original destination"; break;
7727 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7728 saved_offset, asn1->offset - saved_offset,
7733 EXTRANEOUS_DATA_CHECK(len, 1);
7737 param_auth_per(ASN1_SCK *asn1, proto_tree *tree, guint len)
7743 EXACT_DATA_CHECK(len, 2);
7745 saved_offset = asn1->offset;
7747 asn1_int32_value_decode(asn1, 1, &value);
7751 case 0: str = "Not used"; break;
7752 case 1: str = "Per call"; break;
7753 case 2: str = "Hours"; break;
7754 case 3: str = "Days"; break;
7755 case 4: str = "Weeks"; break;
7756 case 5: str = "Per agreement"; break;
7757 case 6: str = "Indefinite"; break;
7758 case 7: str = "Number of calls"; break;
7760 if ((value >= 8) && (value <= 223)) { str = "Reserved, treat as Per call"; }
7761 else { str = "Reserved for protocol extension, treat as Per call"; }
7765 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7766 saved_offset, asn1->offset - saved_offset,
7771 saved_offset = asn1->offset;
7773 asn1_int32_value_decode(asn1, 1, &value);
7775 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7776 saved_offset, asn1->offset - saved_offset,
7782 param_ctrl_chan_mode(ASN1_SCK *asn1, proto_tree *tree, guint len)
7788 saved_offset = asn1->offset;
7790 asn1_int32_value_decode(asn1, 1, &value);
7794 case 0: str = "Unknown"; break;
7795 case 1: str = "MS is in Analog CC Mode"; break;
7796 case 2: str = "MS is in Digital CC Mode"; break;
7797 case 3: str = "MS is in NAMPS CC Mode"; break;
7799 if ((value >= 4) && (value <= 223)) { str = "Reserved, treat as Unknown"; }
7800 else { str = "Reserved for protocol extension, treat as Unknown"; }
7804 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7805 saved_offset, asn1->offset - saved_offset,
7808 EXTRANEOUS_DATA_CHECK(len, 1);
7812 param_tdma_data_mode(ASN1_SCK *asn1, proto_tree *tree, guint len)
7818 SHORT_DATA_CHECK(len, 2);
7820 saved_offset = asn1->offset;
7822 asn1_int32_value_decode(asn1, 1, &value);
7824 switch ((value & 0xe0) >> 5)
7826 case 0: str = "As per IS-135"; break;
7827 case 1: str = "As per FSVS - 211 (STU-III)"; break;
7833 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
7834 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7835 saved_offset, asn1->offset - saved_offset,
7836 "%s : Data Part, %s",
7840 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
7841 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7842 saved_offset, asn1->offset - saved_offset,
7845 (value & 0x10) ? "unacknowledged data only" : "unacked data or both");
7847 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
7848 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7849 saved_offset, asn1->offset - saved_offset,
7852 (value & 0x08) ? "SAP 0 and 1" : "SAP 0 only");
7854 switch (value & 0x07)
7856 case 0: str = "No Data Privacy"; break;
7857 case 1: str = "Data Privacy Algorithm A"; break;
7859 str = "Reserved, treat as No Data Privacy";
7863 my_decode_bitfield_value(bigbuf, value, 0x07, 8);
7864 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7865 saved_offset, asn1->offset - saved_offset,
7866 "%s : Data Privacy Mode, %s",
7870 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
7871 proto_tree_add_text(tree, asn1->tvb,
7872 saved_offset, asn1->offset - saved_offset,
7876 switch ((value & 0x0c) >> 2)
7878 case 0: str = "RLP1"; break;
7879 case 1: str = "RLP2"; break;
7885 my_decode_bitfield_value(bigbuf, value, 0x0c, 8);
7886 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7887 saved_offset, asn1->offset - saved_offset,
7892 switch (value & 0x03)
7894 case 0: str = "16-bit Cyclic Redundancy Check"; break;
7895 case 1: str = "24-bit Cyclic Redundancy Check"; break;
7896 case 2: str = "No Cyclic Redundancy Check"; break;
7902 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
7903 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7904 saved_offset, asn1->offset - saved_offset,
7909 EXTRANEOUS_DATA_CHECK(len, 2);
7913 param_tdma_voice_mode(ASN1_SCK *asn1, proto_tree *tree, guint len)
7919 saved_offset = asn1->offset;
7921 asn1_int32_value_decode(asn1, 1, &value);
7923 switch ((value & 0xf0) >> 4)
7925 case 0: str = "No Voice Privacy"; break;
7926 case 1: str = "Voice Privacy Algorithm A"; break;
7927 case 2: str = "Reserved, treat as No Voice Privacy"; break;
7928 case 3: str = "Reserved, treat as No Voice Privacy"; break;
7929 case 4: str = "Reserved for SOC/BMSC Specific signaling"; break;
7931 str = "Reserved, treat as No Voice Privacy";
7935 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
7936 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7937 saved_offset, asn1->offset - saved_offset,
7938 "%s : Voice Privacy Mode, %s",
7942 switch (value & 0x0f)
7944 case 0: str = "No Voice Coder"; break;
7945 case 1: str = "VSELP Voice Coder"; break;
7946 case 2: str = "IS-641 Voice Coder"; break;
7947 case 6: str = "Reserved for SOC/BMSC Specific signaling"; break;
7949 str = "Reserved, treat as No Voice Coder";
7953 my_decode_bitfield_value(bigbuf, value, 0x0f, 8);
7954 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7955 saved_offset, asn1->offset - saved_offset,
7956 "%s : Voice Coder, %s",
7960 EXTRANEOUS_DATA_CHECK(len, 1);
7964 param_tdma_bandwidth(ASN1_SCK *asn1, proto_tree *tree, guint len)
7970 saved_offset = asn1->offset;
7972 asn1_int32_value_decode(asn1, 1, &value);
7974 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
7975 proto_tree_add_text(tree, asn1->tvb,
7976 saved_offset, asn1->offset - saved_offset,
7980 switch (value & 0x0f)
7982 case 0: str = "Half-Rate Digital Traffic Channel Only"; break;
7983 case 1: str = "Full-Rate Digital Traffic Channel Only"; break;
7984 case 2: str = "Half-Rate or Full-rate Digital Traffic Channel - Full-Rate Preferred"; break;
7985 case 3: str = "Half-rate or Full-rate Digital Traffic Channel - Half-rate Preferred"; break;
7986 case 4: str = "Double Full-Rate Digital Traffic Channel Only"; break;
7987 case 5: str = "Triple Full-Rate Digital Traffic Channel Only"; break;
7989 str = "Reserved, treat as Full-Rate Digital Traffic Channel Only";
7993 my_decode_bitfield_value(bigbuf, value, 0x0f, 8);
7994 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
7995 saved_offset, asn1->offset - saved_offset,
7996 "%s : Bandwidth, %s",
8000 EXTRANEOUS_DATA_CHECK(len, 1);
8004 param_change_srvc_attr(ASN1_SCK *asn1, proto_tree *tree, guint len)
8010 saved_offset = asn1->offset;
8012 asn1_int32_value_decode(asn1, 1, &value);
8014 my_decode_bitfield_value(bigbuf, value, 0xf0, 8);
8015 proto_tree_add_text(tree, asn1->tvb,
8016 saved_offset, asn1->offset - saved_offset,
8020 switch ((value & 0x0c) >> 2)
8022 case 0: str = "Service Negotiation Used"; break;
8023 case 1: str = "Service Negotiation Not Used"; break;
8024 case 2: str = "Service Negotiation Required"; break;
8025 case 3: str = "Service Negotiation Not Required"; break;
8028 my_decode_bitfield_value(bigbuf, value, 0x0c, 8);
8029 proto_tree_add_text(tree, asn1->tvb,
8030 saved_offset, asn1->offset - saved_offset,
8031 "%s : Service Negotiate Flag (SRVNEG), %s",
8035 switch (value & 0x03)
8037 case 0 : str = "Change Facilities Operation Requested"; break;
8038 case 1 : str = "Change Facilities Operation Not Requested"; break;
8039 case 2 : str = "Change Facilities Operation Used"; break;
8040 case 3 : str = "Change Facilities Operation Not Used"; break;
8043 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
8044 proto_tree_add_text(tree, asn1->tvb,
8045 saved_offset, asn1->offset - saved_offset,
8046 "%s : Change Facilities Flag (CHGFAC), %s",
8050 EXTRANEOUS_DATA_CHECK(len, 1);
8054 param_dp_params(ASN1_SCK *asn1, proto_tree *tree, guint len)
8060 SHORT_DATA_CHECK(len, 4);
8062 saved_offset = asn1->offset;
8064 asn1_int32_value_decode(asn1, 1, &value);
8066 my_decode_bitfield_value(bigbuf, value, 0xfc, 8);
8067 proto_tree_add_text(tree, asn1->tvb,
8068 saved_offset, asn1->offset - saved_offset,
8072 switch (value & 0x03)
8074 case 0: str = "Privacy inactive or not supported"; break;
8075 case 1: str = "Privacy Requested or Acknowledged"; break;
8077 str = "Reserved, treat as Privacy inactive or not supported";
8081 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
8082 proto_tree_add_text(tree, asn1->tvb,
8083 saved_offset, asn1->offset - saved_offset,
8084 "%s : Privacy Mode, %s",
8088 saved_offset = asn1->offset;
8090 asn1_int32_value_decode(asn1, 1, &value);
8094 case 0: str = "Not used"; break;
8095 case 1: str = "Data Privacy Version 1"; break;
8097 if ((value >= 2) && (value <= 223)) { str = "Reserved, treat as Not used"; }
8098 else { str = "Reserved for protocol extension, treat as Not used"; }
8102 proto_tree_add_text(tree, asn1->tvb,
8103 saved_offset, asn1->offset - saved_offset,
8104 "Data Privacy Version, %s",
8107 saved_offset = asn1->offset;
8109 proto_tree_add_text(tree, asn1->tvb,
8110 saved_offset, len - 2,
8111 "Data Privacy data");
8113 asn1->offset += (len - 2);
8117 param_trn(ASN1_SCK *asn1, proto_tree *tree, guint len)
8122 saved_offset = asn1->offset;
8124 asn1_string_value_decode(asn1, len, &poctets);
8126 my_dgt_tbcd_unpack(bigbuf, poctets, len, &Dgt_msid);
8129 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8130 saved_offset, len, "TRN %s", bigbuf);
8134 param_islp_info(ASN1_SCK *asn1, proto_tree *tree, guint len)
8140 saved_offset = asn1->offset;
8142 asn1_int32_value_decode(asn1, 1, &value);
8146 case 0: str = "No ISLP supported"; break;
8147 case 1: str = "ISLP supported (see ISLP)"; break;
8149 if ((value >= 2) && (value <= 112)) { str = "Reserved, treat as No ISLP supported"; }
8150 else if ((value >= 113) && (value <= 223)) { str = "Reserved, treat as ISLP supported"; }
8151 else if ((value >= 224) && (value <= 240)) { str = "Reserved for protocol extension, treat as No ISLP supported"; }
8152 else { str = "Reserved for protocol extension, treat as ISLP supported"; }
8156 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8157 saved_offset, asn1->offset - saved_offset,
8160 EXTRANEOUS_DATA_CHECK(len, 1);
8164 param_ana_red_info(ASN1_SCK *asn1, proto_tree *tree, guint len)
8170 saved_offset = asn1->offset;
8172 asn1_int32_value_decode(asn1, 1, &value);
8174 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
8175 proto_tree_add_text(tree, asn1->tvb,
8176 saved_offset, asn1->offset - saved_offset,
8180 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
8181 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8182 saved_offset, asn1->offset - saved_offset,
8183 "%s : Ignore CDMA, %s",
8185 (value & 0x20) ? "Ignore the CDMA Capability Message on the analog system to which it is being redirected" :
8186 "Don't ignore the CDMA Capability Message on the analog system to which it is being redirected");
8188 switch (value & 0x1f)
8190 case 0: str = "Attempt to obtain service on either System A or B in accordance with the custom system selection process"; break;
8191 case 1: str = "Attempt to obtain service on System A only"; break;
8192 case 2: str = "Error in IS-735, text was unspecified but not reserved"; break;
8193 case 3: str = "Attempt to obtain service on System A first. If unsuccessful, attempt to obtain service on System B"; break;
8194 case 4: str = "Attempt to obtain service on System B first. If unsuccessful, attempt to obtain service on System A"; break;
8195 case 5: str = "Attempt to obtain service on either System A or System B. If unsuccessful, attempt to obtain service on the alternate system (System A or System B)"; break;
8198 str = "Reserved for protocol extension";
8202 my_decode_bitfield_value(bigbuf, value, 0x1f, 8);
8203 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8204 saved_offset, asn1->offset - saved_offset,
8205 "%s : Sys Ordering, %s",
8209 EXTRANEOUS_DATA_CHECK(len, 1);
8213 param_reason_list(ASN1_SCK *asn1, proto_tree *tree, guint len)
8220 saved_offset = asn1->offset;
8226 asn1_int32_value_decode(asn1, 1, &value);
8230 case 0: str = "Unknown"; break;
8231 case 1: str = "Unable to configure ISLP"; break;
8232 case 2: str = "ISLP failure"; break;
8233 case 3: str = "Service allowed but facilities not available"; break;
8234 case 4: str = "Service not allowed"; break;
8235 case 5: str = "No Response to TMSI assignment"; break;
8236 case 6: str = "Required parameters unavailable. (e.g., as indicated by the RequiredParametersMask parameter)"; break;
8238 if ((value >= 7) && (value <= 110)) { str = "Reserved for common CDMA and TDMA network error causes. If unknown, treat as Unknown"; }
8239 else if ((value >= 111) && (value <= 127)) { str = "Reserved for common CDMA and TDMA network error causes for protocol extension. If unknown, treat as Unknown"; }
8240 else if ((value >= 128) && (value <= 174)) { str = "CDMA Specific error causes. If unknown, treat as Unknown"; }
8241 else if ((value >= 175) && (value <= 191)) { str = "CDMA Specific error causes for protocol extension. If unknown treat as Unknown"; }
8242 else if ((value >= 192) && (value <= 237)) { str = "TDMA Specific error causes as defined by the TDMACause parameter. If unknown treat as Unknown"; }
8243 else { str = "TDMA Specific error causes for protocol extension. If unknown, treat as Unknown"; }
8247 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8248 saved_offset, asn1->offset - saved_offset,
8253 saved_offset = asn1->offset;
8255 while ((len - i) > 0);
8259 param_imsi(ASN1_SCK *asn1, proto_tree *tree, guint len)
8264 saved_offset = asn1->offset;
8265 asn1_string_value_decode(asn1, len, &poctets);
8267 my_dgt_tbcd_unpack(bigbuf, poctets, len, &Dgt_msid);
8270 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8277 param_min(ASN1_SCK *asn1, proto_tree *tree, guint len)
8282 EXACT_DATA_CHECK(len, 5);
8284 saved_offset = asn1->offset;
8285 asn1_string_value_decode(asn1, len, &poctets);
8287 my_dgt_tbcd_unpack(bigbuf, poctets, len, &Dgt_msid);
8290 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8297 param_auth_cap(ASN1_SCK *asn1, proto_tree *tree, guint len)
8303 EXACT_DATA_CHECK(len, 1);
8305 saved_offset = asn1->offset;
8307 asn1_int32_value_decode(asn1, 1, &value);
8311 case 0: str = "Not used"; break;
8312 case 1: str = "No authentication required"; break;
8313 case 2: str = "Authentication required"; break;
8314 case 128: str = "Authentication required and UIM capable"; break;
8316 if ((value >= 3) && (value <= 95)) { str = "Reserved, treat as No authentication required"; }
8317 else if ((value >= 96) && (value <= 127)) { str = "Reserved for protocol extension, treat as No authentication required"; }
8318 else if ((value >= 129) && (value <= 223)) { str = "Reserved, treat as Authentication required"; }
8319 else { str = "Reserved for protocol extension, treat as Authentication required"; }
8323 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8324 saved_offset, asn1->offset - saved_offset,
8329 param_sus_acc(ASN1_SCK *asn1, proto_tree *tree, guint len)
8335 EXACT_DATA_CHECK(len, 1);
8337 saved_offset = asn1->offset;
8339 asn1_int32_value_decode(asn1, 1, &value);
8343 case 0: str = "Not used"; break;
8344 case 1: str = "Anomalous digits"; break;
8345 case 2: str = "Unspecified"; break;
8347 if ((value >= 3) && (value <= 113)) { str = "Reserved, treat as Anomalous digits"; }
8348 else if ((value >= 114) && (value <= 223)) { str = "Reserved, treat as Unspecified"; }
8349 else { str = "Reserved for protocol extension, treat as Unspecified"; }
8353 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8354 saved_offset, asn1->offset - saved_offset,
8360 param_dis_text(ASN1_SCK *asn1, proto_tree *tree, guint len)
8365 SHORT_DATA_CHECK(len, 3);
8367 saved_offset = asn1->offset;
8369 asn1_int32_value_decode(asn1, 1, &value);
8371 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
8372 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8373 saved_offset, asn1->offset - saved_offset,
8374 "%s : Spec. has hardcoded 1",
8377 my_decode_bitfield_value(bigbuf, value, 0x7f, 8);
8378 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8379 saved_offset, asn1->offset - saved_offset,
8380 "%s : Display type, see ANSI T1.610 for encoding",
8383 saved_offset = asn1->offset;
8385 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8386 saved_offset, len - 1,
8389 asn1->offset += len - 1;
8393 param_dis_text2(ASN1_SCK *asn1, proto_tree *tree, guint len)
8396 guint orig_offset, saved_offset;
8399 SHORT_DATA_CHECK(len, 4);
8401 orig_offset = asn1->offset;
8402 saved_offset = asn1->offset;
8406 asn1_int32_value_decode(asn1, 1, &value);
8410 case 0: str = "Not used"; break;
8411 case 1: str = "ASCII"; break;
8412 case 2: str = "ITU T.50. The International Reference Alphabet as defined in ITU-R Rec. T.50"; break;
8413 case 3: str = "User Specific"; break;
8414 case 4: str = "ISO 8859-1. The 8-bit single-byte coded character set Latin 1 as defined in ISO/IEC Standard 8859-1"; break;
8415 case 5: str = "ISO 10646. The Universal Multiple-Octet Coded Character Set (USC) as defined in ISO/IEC Standard 10646"; break;
8416 case 6: str = "ISO 8859-8. The 8-bit single-byte coded character set Hebrew as defined in ISO/IEC Standard 8859-8"; break;
8417 case 7: str = "IS-91 Extended Protocol Message. The length is determined by the Message Type; see TIA/EIA/IS-90"; break;
8418 case 8: str = "Shift-JIS. Variable 1-2 byte nonmodal encoding for Kanji, Kana, and Latin character sets defined in JIS X0201 and JIS X0206"; break;
8419 case 9: str = "KC C 5601. Variable 1-2 byte Korean encoding method"; break;
8421 if ((value >= 10) && (value <= 223)) { str = "Reserved, treat as ASCII"; }
8422 else { str = "Reserved, treat as ASCII"; }
8426 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8427 saved_offset, asn1->offset - saved_offset,
8428 "Display Character Set, %s",
8431 saved_offset = asn1->offset;
8433 asn1_int32_value_decode(asn1, 1, &value);
8435 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8436 saved_offset, asn1->offset - saved_offset,
8437 "Display Type, %d, see ANSI T1.610",
8440 saved_offset = asn1->offset;
8442 asn1_int32_value_decode(asn1, 1, &value);
8444 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8445 saved_offset, asn1->offset - saved_offset,
8449 saved_offset = asn1->offset;
8451 asn1_int32_value_decode(asn1, 1, &value);
8453 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8454 saved_offset, asn1->offset - saved_offset,
8455 "Display Length, %d",
8458 saved_offset = asn1->offset;
8462 if ((guint32) value > (len - (saved_offset - orig_offset)))
8464 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8465 saved_offset, len - (saved_offset - orig_offset),
8468 asn1->offset += len - (saved_offset - orig_offset);
8472 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8473 saved_offset, value,
8476 asn1->offset += value;
8478 saved_offset = asn1->offset;
8481 while ((len - (saved_offset - orig_offset)) >= 4);
8483 EXTRANEOUS_DATA_CHECK((len - (saved_offset - orig_offset)), 0);
8487 param_dmh_srvc_id(ASN1_SCK *asn1, proto_tree *tree, guint len)
8490 guint orig_offset, saved_offset;
8492 SHORT_DATA_CHECK(len, 5);
8494 orig_offset = asn1->offset;
8495 saved_offset = asn1->offset;
8499 asn1_int32_value_decode(asn1, 2, &value);
8501 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8502 saved_offset, asn1->offset - saved_offset,
8506 saved_offset = asn1->offset;
8508 asn1_int32_value_decode(asn1, 1, &value);
8510 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8511 saved_offset, asn1->offset - saved_offset,
8512 "Market Segment ID %d",
8515 saved_offset = asn1->offset;
8517 asn1_int32_value_decode(asn1, 2, &value);
8519 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8520 saved_offset, asn1->offset - saved_offset,
8521 "DMH Service ID Value %d",
8524 saved_offset = asn1->offset;
8526 while ((len - (saved_offset - orig_offset)) >= 5);
8528 EXTRANEOUS_DATA_CHECK((len - (saved_offset - orig_offset)), 0);
8532 param_feat_ind(ASN1_SCK *asn1, proto_tree *tree, guint len)
8535 guint orig_offset, saved_offset;
8537 SHORT_DATA_CHECK(len, 5);
8539 orig_offset = asn1->offset;
8540 saved_offset = asn1->offset;
8544 asn1_int32_value_decode(asn1, 2, &value);
8546 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8547 saved_offset, asn1->offset - saved_offset,
8551 saved_offset = asn1->offset;
8553 asn1_int32_value_decode(asn1, 1, &value);
8555 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8556 saved_offset, asn1->offset - saved_offset,
8557 "Market Segment ID %d",
8560 saved_offset = asn1->offset;
8562 asn1_int32_value_decode(asn1, 2, &value);
8564 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8565 saved_offset, asn1->offset - saved_offset,
8566 "DMH Service ID Value %d",
8569 saved_offset = asn1->offset;
8571 while ((len - (saved_offset - orig_offset)) >= 5);
8573 EXTRANEOUS_DATA_CHECK((len - (saved_offset - orig_offset)), 0);
8577 param_a_key_ver(ASN1_SCK *asn1, proto_tree *tree, guint len)
8584 saved_offset = asn1->offset;
8590 asn1_int32_value_decode(asn1, 1, &value);
8594 case 0: str = "Not used"; break;
8595 case 1: str = "A-key Generation not supported"; break;
8596 case 2: str = "Diffie Hellman with 768-bit modulus, 160-bit primitive, and 160-bit exponents"; break;
8597 case 3: str = "Diffie Hellman with 512-bit modulus, 160-bit primitive, and 160-bit exponents"; break;
8598 case 4: str = "Diffie Hellman with 768-bit modulus, 32-bit primitive, and 160-bit exponents"; break;
8600 if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as A-key Generation not supported"; }
8601 else { str = "Reserved for protocol extension, treat as A-key Generation not supported"; }
8605 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8606 saved_offset, asn1->offset - saved_offset,
8611 saved_offset = asn1->offset;
8613 while ((len - i) > 0);
8617 param_inter_msg_time(ASN1_SCK *asn1, proto_tree *tree, guint len)
8622 EXACT_DATA_CHECK(len, 1);
8624 saved_offset = asn1->offset;
8626 asn1_int32_value_decode(asn1, 1, &value);
8628 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8629 saved_offset, asn1->offset - saved_offset,
8630 "Timer Value, %d, %d seconds",
8634 /* XXX * 10 or / 10 ? */
8638 param_rel_cause(ASN1_SCK *asn1, proto_tree *tree, guint len)
8644 EXACT_DATA_CHECK(len, 1);
8646 saved_offset = asn1->offset;
8648 asn1_int32_value_decode(asn1, 1, &value);
8652 case 0: str = "Unspecified"; break;
8653 case 1: str = "Calling Party"; break;
8654 case 2: str = "Called Party"; break;
8655 case 3: str = "Commanded Disconnect"; break;
8657 if ((value >= 4) && (value <= 23)) { str = "Reserved, treat as Calling Party"; }
8658 else if ((value >= 24) && (value <= 31)) { str = "Reserved for protocol extension. If unknown, treat as Calling Party"; }
8659 else if ((value >= 32) && (value <= 55)) { str = "Reserved, treat as Called Party"; }
8660 else if ((value >= 56) && (value <= 63)) { str = "Reserved for protocol extension. If unknown, treat as Called Party"; }
8661 else if ((value >= 64) && (value <= 87)) { str = "Reserved, treat as Commanded Disconnect"; }
8662 else if ((value >= 88) && (value <= 95)) { str = "Reserved for protocol extension. If unknown, treat as Commanded Disconnect"; }
8663 else if ((value >= 96) && (value <= 223)) { str = "Reserved, treat as Unspecified"; }
8664 else { str = "Reserved for protocol extension. If unknown, treat as Unspecified"; }
8668 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8669 saved_offset, asn1->offset - saved_offset,
8674 param_time_day(ASN1_SCK *asn1, proto_tree *tree, guint len)
8680 EXACT_DATA_CHECK(len, 3);
8682 saved_offset = asn1->offset;
8684 asn1_int32_value_decode(asn1, 3, &value);
8686 h = value / (3600 * 10);
8687 m = (value - (h * (3600 * 10))) / (60 * 10);
8688 s = (value - (h * (3600 * 10)) - (m * (60 * 10))) / 10;
8689 ts = (value - (h * (3600 * 10)) - (m * (60 * 10)) - (s * 10));
8691 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8692 saved_offset, asn1->offset - saved_offset,
8693 "(UTC) (in tenths of seconds - 1), %d (%d:%d:%d.%d)",
8702 param_call_status(ASN1_SCK *asn1, proto_tree *tree, guint len)
8710 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8711 asn1->offset, len, "Long Data (?)");
8712 asn1->offset += len;
8716 saved_offset = asn1->offset;
8718 asn1->offset = saved_offset;
8720 asn1_int32_value_decode(asn1, len, &value);
8724 case 0: str = "Not used"; break;
8725 case 1: str = "Call Setup in Progress"; break;
8726 case 2: str = "Locally Allowed Call - No Action"; break;
8728 if (value < 0) { str = "Reserved for bilateral agreements. If unknown, treat as Not used"; }
8729 else { str = "Reserved, treat as Not used"; }
8733 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8739 param_ms_status(ASN1_SCK *asn1, proto_tree *tree, guint len)
8747 saved_offset = asn1->offset;
8749 asn1_int32_value_decode(asn1, 1, &value);
8751 extended = (value & 0x80) >> 7;
8753 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
8754 proto_tree_add_text(tree, asn1->tvb,
8755 saved_offset, asn1->offset - saved_offset,
8756 "%s : Extension (EXT), %s",
8758 extended ? "No Extension, last octet of sequence" : "Extension indicator, the octet continues through the next octet");
8760 my_decode_bitfield_value(bigbuf, value, 0x60, 8);
8761 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8762 saved_offset, asn1->offset - saved_offset,
8766 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
8767 proto_tree_add_text(tree, asn1->tvb,
8768 saved_offset, asn1->offset - saved_offset,
8769 "%s : Location Information (LOC), %s",
8771 (value & 0x10) ? "MS location information available" : "No MS location information available");
8773 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
8774 proto_tree_add_text(tree, asn1->tvb,
8775 saved_offset, asn1->offset - saved_offset,
8778 (value & 0x08) ? "Radio Contact Established" : "No Radio Contact");
8780 has_chan = (value & 0x04) >> 2;
8782 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
8783 proto_tree_add_text(tree, asn1->tvb,
8784 saved_offset, asn1->offset - saved_offset,
8787 has_chan ? "Traffic Channel Assigned" : "No Traffic Channel");
8789 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
8790 proto_tree_add_text(tree, asn1->tvb,
8791 saved_offset, asn1->offset - saved_offset,
8794 (value & 0x02) ? "Intersystem Handoff" : "No Intersystem Handoff");
8796 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
8797 proto_tree_add_text(tree, asn1->tvb,
8798 saved_offset, asn1->offset - saved_offset,
8799 "%s : Inactive, %s",
8801 (value & 0x01) ? "MS Inactive" : "MS Active");
8803 if (len == 1) return;
8805 saved_offset = asn1->offset;
8807 asn1_int32_value_decode(asn1, 1, &value);
8811 proto_tree_add_text(tree, asn1->tvb,
8812 saved_offset, asn1->offset - saved_offset,
8813 "Octet 1a ? spec. does not provide details");
8815 saved_offset = asn1->offset;
8817 EXTRANEOUS_DATA_CHECK(len, 2);
8826 case 0: str = "Not used "; break;
8827 case 1: str = "Analog. The MS is currently assigned to an analog traffic channel"; break;
8828 case 2: str = "NAMPS. The MS is currently assigned to an NAMPS traffic channel"; break;
8829 case 3: str = "TDMA. The MS is currently assigned to a TDMA traffic channel"; break;
8830 case 4: str = "CDMA. The MS is currently assigned to a CDMA traffic channel"; break;
8832 if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as Not used"; }
8833 else { str = "Reserved for protocol extension, treat as Not used"; }
8837 proto_tree_add_text(tree, asn1->tvb,
8838 saved_offset, asn1->offset - saved_offset,
8839 "Radio Channel Type, %s",
8842 saved_offset = asn1->offset;
8844 EXTRANEOUS_DATA_CHECK(len, 2);
8851 EXTRANEOUS_DATA_CHECK(len, 1);
8855 param_pos_info_code(ASN1_SCK *asn1, proto_tree *tree, guint len)
8860 saved_offset = asn1->offset;
8862 asn1_int32_value_decode(asn1, 1, &value);
8864 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
8865 proto_tree_add_text(tree, asn1->tvb,
8866 saved_offset, asn1->offset - saved_offset,
8870 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
8871 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8872 saved_offset, asn1->offset - saved_offset,
8873 "%s : MS Identity (MSID), %s",
8875 (value & 0x10) ? "MS Identity Requested" : "No MS Identity Requested");
8877 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
8878 proto_tree_add_text(tree, asn1->tvb,
8879 saved_offset, asn1->offset - saved_offset,
8880 "%s : Routing Address (ROUTE), %s",
8882 (value & 0x08) ? "Routing Address Requested" : "No Routing Address Requested");
8884 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
8885 proto_tree_add_text(tree, asn1->tvb,
8886 saved_offset, asn1->offset - saved_offset,
8887 "%s : Serving Cell ID (CELLID), %s",
8889 (value & 0x04) ? "Serving Cell ID Requested" : "No Serving Cell ID Requested");
8891 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
8892 proto_tree_add_text(tree, asn1->tvb,
8893 saved_offset, asn1->offset - saved_offset,
8894 "%s : Location Area ID (LOCID), %s",
8896 (value & 0x02) ? "Location Area ID Requested" : "No Location Area ID Requested");
8898 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
8899 proto_tree_add_text(tree, asn1->tvb,
8900 saved_offset, asn1->offset - saved_offset,
8903 (value & 0x01) ? "Provide the current MS location" : "Provide the last known MS location information, if known");
8905 EXTRANEOUS_DATA_CHECK(len, 1);
8909 param_rel_reason(ASN1_SCK *asn1, proto_tree *tree, guint len)
8915 EXACT_DATA_CHECK(len, 1);
8917 saved_offset = asn1->offset;
8919 asn1_int32_value_decode(asn1, 1, &value);
8923 case 0: str = "Unspecified"; break;
8924 case 1: str = "Call Over Clear Forward"; break;
8925 case 2: str = "Call Over Clear Backward"; break;
8926 case 3: str = "Handoff Successful"; break;
8927 case 4: str = "Handoff Abort - call over"; break;
8928 case 5: str = "Handoff Abort - not received"; break;
8929 case 6: str = "Abnormal mobile termination"; break;
8930 case 7: str = "Abnormal switch termination"; break;
8931 case 8: str = "Special feature release"; break;
8932 case 9: str = "Session Over Clear Forward"; break;
8933 case 10: str = "Session Over Clear Backward"; break;
8934 case 11: str = "Clear All Services Forward"; break;
8935 case 12: str = "Clear All Services Backward"; break;
8936 case 13: str = "Anchor MSC was removed from the packet data session"; break;
8938 if ((value >= 14) && (value <= 223)) { str = "Reserved, treat as Unspecified"; }
8939 else { str = "Reserved for protocol extension, treat as Unspecified"; }
8943 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8944 saved_offset, asn1->offset - saved_offset,
8950 param_ho_reason(ASN1_SCK *asn1, proto_tree *tree, guint len)
8956 EXACT_DATA_CHECK(len, 1);
8958 saved_offset = asn1->offset;
8960 asn1_int32_value_decode(asn1, 1, &value);
8964 case 0: str = "Not used"; break;
8965 case 1: str = "Unspecified"; break;
8966 case 2: str = "Weak signal"; break;
8967 case 3: str = "Off-loading"; break;
8968 case 4: str = "Anticipatory"; break;
8970 if ((value >= 5) && (value <= 223)) { str = "Reserved, treat as Unspecified"; }
8971 else { str = "Reserved for protocol extension, treat as Unspecified"; }
8975 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
8976 saved_offset, asn1->offset - saved_offset,
8981 param_red_reason(ASN1_SCK *asn1, proto_tree *tree, guint len)
8987 EXACT_DATA_CHECK(len, 1);
8989 saved_offset = asn1->offset;
8991 asn1_int32_value_decode(asn1, 1, &value);
8995 case 0: str = "Not used"; break;
8996 case 1: str = "Busy"; break;
8997 case 2: str = "No answer"; break;
8998 case 3: str = "Unconditional"; break;
8999 case 4: str = "No page response"; break;
9000 case 5: str = "Unavailable"; break;
9001 case 6: str = "Unroutable"; break;
9002 case 7: str = "Call accepted"; break;
9003 case 8: str = "Call refused"; break;
9004 case 9: str = "USCFvm, divert to voice mail"; break;
9005 case 10: str = "USCFms, divert to an MS provided DN"; break;
9006 case 11: str = "USCFnr, divert to a network registered DN"; break;
9008 if ((value >= 12) && (value <= 223)) { str = "Reserved, treat as No answer"; }
9009 else { str = "Reserved for protocol extension, treat as No answer"; }
9013 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9014 saved_offset, asn1->offset - saved_offset,
9019 param_confid_mode(ASN1_SCK *asn1, proto_tree *tree, guint len)
9024 EXACT_DATA_CHECK(len, 1);
9026 saved_offset = asn1->offset;
9028 asn1_int32_value_decode(asn1, 1, &value);
9030 my_decode_bitfield_value(bigbuf, value, 0xf8, 8);
9031 proto_tree_add_text(tree, asn1->tvb,
9032 saved_offset, asn1->offset - saved_offset,
9036 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
9037 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9038 saved_offset, asn1->offset - saved_offset,
9039 "%s : Data Privacy (DP), %s",
9041 (value & 0x04) ? "ON" : "OFF");
9043 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
9044 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9045 saved_offset, asn1->offset - saved_offset,
9046 "%s : Signaling Message Encryption (SE), %s",
9048 (value & 0x02) ? "ON" : "OFF");
9050 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
9051 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9052 saved_offset, asn1->offset - saved_offset,
9053 "%s : Voice Privacy (VP), %s",
9055 (value & 0x01) ? "ON" : "OFF");
9059 param_sys_acc_type(ASN1_SCK *asn1, proto_tree *tree, guint len)
9065 EXACT_DATA_CHECK(len, 1);
9067 saved_offset = asn1->offset;
9069 asn1_int32_value_decode(asn1, 1, &value);
9073 case 0: str = "Not used"; break;
9074 case 1: str = "Unspecified"; break;
9075 case 2: str = "Flash request"; break;
9076 case 3: str = "Autonomous registration"; break;
9077 case 4: str = "Call origination"; break;
9078 case 5: str = "Page response"; break;
9079 case 6: str = "No access"; break;
9080 case 7: str = "Power down registration"; break;
9081 case 8: str = "SMS page response"; break;
9082 case 9: str = "OTASP"; break;
9084 if ((value >= 10) && (value <= 223)) { str = "Reserved, treat as Unspecified"; }
9085 else { str = "Reserved for protocol extension, treat as Unspecified"; }
9089 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9090 saved_offset, asn1->offset - saved_offset,
9095 param_scm(ASN1_SCK *asn1, proto_tree *tree, guint len)
9097 gint32 value, temp_int;
9101 EXACT_DATA_CHECK(len, 1);
9103 saved_offset = asn1->offset;
9105 asn1_int32_value_decode(asn1, 1, &value);
9107 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
9108 proto_tree_add_text(tree, asn1->tvb,
9109 saved_offset, asn1->offset - saved_offset,
9113 temp_int = ((value & 0x10) >> 2) | (value & 0x03);
9116 case 0: str = "Class I"; break;
9117 case 1: str = "Class II"; break;
9118 case 2: str = "Class III"; break;
9119 case 3: str = "Class IV"; break;
9120 case 4: str = "Class V"; break;
9121 case 5: str = "Class VI"; break;
9122 case 6: str = "Class VII"; break;
9123 case 7: str = "Class VIII"; break;
9126 my_decode_bitfield_value(bigbuf, value, 0x13, 8);
9127 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9128 saved_offset, asn1->offset - saved_offset,
9133 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
9134 proto_tree_add_text(tree, asn1->tvb,
9135 saved_offset, asn1->offset - saved_offset,
9136 "%s : Bandwidth %s",
9138 (value & 0x08) ? "25 MHz" : "20 MHz");
9140 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
9141 proto_tree_add_text(tree, asn1->tvb,
9142 saved_offset, asn1->offset - saved_offset,
9143 "%s : Transmission, %s",
9145 (value & 0x04) ? "Discontinuous" : "Continuous");
9149 param_deny_acc(ASN1_SCK *asn1, proto_tree *tree, guint len)
9155 EXACT_DATA_CHECK(len, 1);
9157 saved_offset = asn1->offset;
9159 asn1_int32_value_decode(asn1, 1, &value);
9163 case 0: str = "Not used"; break;
9164 case 1: str = "Unspecified"; break;
9165 case 2: str = "SSD Update failure"; break;
9166 case 3: str = "COUNT Update failure"; break;
9167 case 4: str = "Unique Challenge failure"; break;
9168 case 5: str = "AUTHR mismatch"; break;
9169 case 6: str = "COUNT mismatch"; break;
9170 case 7: str = "Process collision"; break;
9171 case 8: str = "Missing authentication parameters"; break;
9172 case 9: str = "TerminalType mismatch"; break;
9173 case 10: str = "MIN, IMSI or ESN authorization failure"; break;
9175 if ((value >= 11) && (value <= 223)) { str = "Reserved, treat as Unspecified"; }
9176 else { str = "Reserved for protocol extension, treat as Unspecified"; }
9180 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9181 saved_offset, asn1->offset - saved_offset,
9186 param_cdma_sig_qual(ASN1_SCK *asn1, proto_tree *tree, guint len)
9191 EXACT_DATA_CHECK(len, 1);
9193 saved_offset = asn1->offset;
9195 asn1_int32_value_decode(asn1, 1, &value);
9197 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
9198 proto_tree_add_text(tree, asn1->tvb,
9199 saved_offset, asn1->offset - saved_offset,
9203 my_decode_bitfield_value(bigbuf, value, 0x3f, 8);
9204 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9205 saved_offset, asn1->offset - saved_offset,
9212 param_rec_sig_qual(ASN1_SCK *asn1, proto_tree *tree, guint len)
9218 EXACT_DATA_CHECK(len, 1);
9220 saved_offset = asn1->offset;
9222 asn1_int32_value_decode(asn1, 1, &value);
9226 case 0: str = "Not a usable signal"; break;
9227 case 255: str = "Interference"; break;
9229 if ((value >= 1) && (value <= 8)) { str = "Reserved, treat as Not a usable signal"; }
9230 else if ((value >= 9) && (value <= 245)) { str = "Usable signal range"; }
9231 else if ((value >= 246) && (value <= 254)) { str = "Reserved, treat as Interference"; }
9235 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9236 saved_offset, asn1->offset - saved_offset,
9241 param_sig_qual(ASN1_SCK *asn1, proto_tree *tree, guint len)
9247 EXACT_DATA_CHECK(len, 1);
9249 saved_offset = asn1->offset;
9251 asn1_int32_value_decode(asn1, 1, &value);
9255 case 0: str = "Not a usable signal"; break;
9256 case 255: str = "Interference"; break;
9258 if ((value >= 1) && (value <= 8)) { str = "Reserved, treat as Not a usable signal"; }
9259 else if ((value >= 9) && (value <= 245)) { str = "Usable signal range"; }
9260 else if ((value >= 246) && (value <= 254)) { str = "Reserved, treat as Interference"; }
9264 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9265 saved_offset, asn1->offset - saved_offset,
9270 param_ssd_no_share(ASN1_SCK *asn1, proto_tree *tree, guint len)
9276 EXACT_DATA_CHECK(len, 1);
9278 saved_offset = asn1->offset;
9280 asn1_int32_value_decode(asn1, 1, &value);
9284 case 0: str = "Not used"; break;
9285 case 1: str = "Discard SSD"; break;
9287 str = "Reserved, treat as Discard SSD";
9291 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9292 saved_offset, asn1->offset - saved_offset,
9297 param_report_type(ASN1_SCK *asn1, proto_tree *tree, guint len)
9303 EXACT_DATA_CHECK(len, 1);
9305 saved_offset = asn1->offset;
9307 asn1_int32_value_decode(asn1, 1, &value);
9311 case 0: str = "Not used"; break;
9312 case 1: str = "Unspecified security violation"; break;
9313 case 2: str = "MSID/ESN mismatch"; break;
9314 case 3: str = "RANDC mismatch"; break;
9315 case 4: str = "Reserved (see TSB51)"; break;
9316 case 5: str = "SSD Update failed"; break;
9317 case 6: str = "Reserved (see TSB51)"; break;
9318 case 7: str = "COUNT mismatch"; break;
9319 case 8: str = "Reserved (see TSB51)"; break;
9320 case 9: str = "Unique Challenge failed"; break;
9321 case 10: str = "Unsolicited Base Station Challenge"; break;
9322 case 11: str = "SSD Update no response"; break;
9323 case 12: str = "COUNT Update no response"; break;
9324 case 13: str = "Unique Challenge no response"; break;
9325 case 14: str = "AUTHR mismatch"; break;
9326 case 15: str = "TERMTYP mismatch"; break;
9327 case 16: str = "Missing authentication parameters"; break;
9329 if ((value >= 17) && (value <= 223)) { str = "Reserved, treat as Unspecified security violation"; }
9330 else { str = "Reserved for protocol extension, treat as Unspecified security violation"; }
9334 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9335 saved_offset, asn1->offset - saved_offset,
9340 param_term_type(ASN1_SCK *asn1, proto_tree *tree, guint len)
9346 EXACT_DATA_CHECK(len, 1);
9348 saved_offset = asn1->offset;
9350 asn1_int32_value_decode(asn1, 1, &value);
9354 case 0: str = "Not used"; break;
9355 case 1: str = "Not distinguished, EIA/TIA-553, IS-54-A, IS-88, IS-91, IS-94"; break;
9356 case 2: str = "IS-54-B"; break;
9357 case 3: str = "IS-136"; break;
9358 case 4: str = "J-STD-011 (rescinded 11/23/99)"; break;
9359 case 5: str = "IS-136-A or TIA/EIA-136 Revision-0"; break;
9360 case 6: str = "TIA/EIA-136-A"; break;
9361 case 7: str = "TIA/EIA-136-B"; break;
9362 case 32: str = "IS-95"; break;
9363 case 33: str = "IS-95-A"; break;
9364 case 34: str = "J-STD-008"; break;
9365 case 35: str = "IS-95-B"; break;
9366 case 36: str = "IS-2000"; break;
9367 case 64: str = "IS-88"; break;
9368 case 65: str = "IS-94"; break;
9369 case 66: str = "IS-91"; break;
9370 case 67: str = "J-STD-014"; break;
9371 case 68: str = "TIA/EIA-553-A"; break;
9372 case 69: str = "IS-91-A"; break;
9374 if ((value >= 8) && (value <= 31)) { str = "Reserved, treat as IS-54-B"; }
9375 else if ((value >= 37) && (value <= 63)) { str = "Reserved, treat as IS-95-A"; }
9376 else if ((value >= 70) && (value <= 223)) { str = "Reserved, treat as Not distinguished"; }
9377 else { str = "Reserved for protocol extension, treat as Not distinguished"; }
9381 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9382 saved_offset, asn1->offset - saved_offset,
9387 param_term_res(ASN1_SCK *asn1, proto_tree *tree, guint len)
9393 EXACT_DATA_CHECK(len, 1);
9395 saved_offset = asn1->offset;
9397 asn1_int32_value_decode(asn1, 1, &value);
9401 case 0: str = "Not used"; break;
9402 case 1: str = "Termination denied"; break;
9403 case 2: str = "Unrestricted"; break;
9404 case 3: str = "Treatment for this value is not specified"; break;
9406 if ((value >= 4) && (value <= 223)) { str = "Reserved, treat as Unrestricted"; }
9407 else { str = "Reserved for protocol extension, treat as Unrestricted"; }
9411 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9412 saved_offset, asn1->offset - saved_offset,
9417 param_dereg(ASN1_SCK *asn1, proto_tree *tree, guint len)
9423 EXACT_DATA_CHECK(len, 1);
9425 saved_offset = asn1->offset;
9427 asn1_int32_value_decode(asn1, 1, &value);
9431 case 0: str = "Not used"; break;
9432 case 1: str = "Deregister for an unspecified reason"; break;
9433 case 2: str = "Deregister for an adminstrative reason"; break;
9434 case 3: str = "Deregister due to MS power down"; break;
9436 if ((value >= 4) && (value <= 223)) { str = "Reserved, treat as Deregister for an unspecified reason"; }
9437 else { str = "Reserved for protocol extension, treat as Deregister for an unspecified reason"; }
9441 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9442 saved_offset, asn1->offset - saved_offset,
9447 param_group_info(ASN1_SCK *asn1, proto_tree *tree, guint len)
9452 SHORT_DATA_CHECK(len, 4);
9454 saved_offset = asn1->offset;
9456 asn1_int32_value_decode(asn1, 4, &value);
9458 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9459 saved_offset, asn1->offset - saved_offset,
9463 EXTRANEOUS_DATA_CHECK(len, 4);
9467 param_auth_den(ASN1_SCK *asn1, proto_tree *tree, guint len)
9473 EXACT_DATA_CHECK(len, 1);
9475 saved_offset = asn1->offset;
9477 asn1_int32_value_decode(asn1, 1, &value);
9481 case 0: str = "Not used"; break;
9482 case 1: str = "Delinquent account"; break;
9483 case 2: str = "Invalid serial number"; break;
9484 case 3: str = "Stolen unit"; break;
9485 case 4: str = "Duplicate unit"; break;
9486 case 5: str = "Unassigned directory number"; break;
9487 case 6: str = "Unspecified"; break;
9488 case 7: str = "Multiple access"; break;
9489 case 8: str = "Not Authorized for the MSC"; break;
9490 case 9: str = "Missing authentication parameters"; break;
9491 case 10: str = "Terminal Type mismatch"; break;
9493 if ((value >= 11) && (value <= 223)) { str = "Reserved, treat as Unspecified"; }
9494 else { str = "Reserved for protocol extension, treat as Unspecified"; }
9498 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9499 saved_offset, asn1->offset - saved_offset,
9506 find_trig_type(gint32 value)
9512 case 0: str = "Unspecified"; break;
9513 case 1: str = "All Calls"; break;
9514 case 2: str = "Double Introducing Star"; break;
9515 case 3: str = "Single Introducing Star"; break;
9516 case 4: str = "Reserved [for Home System Feature Code"; break;
9517 case 5: str = "Double Introducing Pound"; break;
9518 case 6: str = "Single Introducing Pound"; break;
9519 case 7: str = "Revertive Call"; break;
9520 case 8: str = "0 Digit"; break;
9521 case 9: str = "1 Digit"; break;
9522 case 10: str = "2 Digit"; break;
9523 case 11: str = "3 Digit"; break;
9524 case 12: str = "4 Digit"; break;
9525 case 13: str = "5 Digit"; break;
9526 case 14: str = "6 Digit"; break;
9527 case 15: str = "7 Digit"; break;
9528 case 16: str = "8 Digit"; break;
9529 case 17: str = "9 Digit"; break;
9530 case 18: str = "10 Digit"; break;
9531 case 19: str = "11 Digit"; break;
9532 case 20: str = "12 Digit"; break;
9533 case 21: str = "13 Digit"; break;
9534 case 22: str = "14 Digit"; break;
9535 case 23: str = "15 Digit"; break;
9536 case 24: str = "Local Call"; break;
9537 case 25: str = "Intra-LATA Toll Call"; break;
9538 case 26: str = "Inter-LATA Toll Call"; break;
9539 case 27: str = "World Zone Call"; break;
9540 case 28: str = "International Call"; break;
9541 case 29: str = "Unrecognized Number"; break;
9542 case 30: str = "Prior Agreement"; break;
9543 case 31: str = "Specific Called Party Digit String"; break;
9544 case 32: str = "Mobile Termination"; break;
9545 case 33: str = "Advanced Termination"; break;
9546 case 34: str = "Location"; break;
9547 case 35: str = "Locally Allowed Specific Digit String"; break;
9548 case 36: str = "Origination Attempt Authorized"; break;
9549 case 37: str = "Calling Routing Address Available"; break;
9550 case 38: str = "Initial Termination"; break;
9551 case 39: str = "Called Routing Address Available"; break;
9552 case 40: str = "O Answer"; break;
9553 case 41: str = "O Disconnect"; break;
9554 case 42: str = "O Called Party Busy"; break;
9555 case 43: str = "O No Answer"; break;
9556 case 64: str = "Terminating Resource Available"; break;
9557 case 65: str = "T Busy"; break;
9558 case 66: str = "T No Answer"; break;
9559 case 67: str = "T No Page Response"; break;
9560 case 68: str = "T Unroutable"; break;
9561 case 69: str = "T Answer"; break;
9562 case 70: str = "T Disconnect"; break;
9563 case 220: str = "Reserved for TDP-R DP Type value"; break;
9564 case 221: str = "Reserved for TDP-N DP Type value"; break;
9565 case 222: str = "Reserved for EDP-R DP Type value"; break;
9566 case 223: str = "Reserved for EDP-N DP Type value"; break;
9568 if ((value >= 44) && (value <= 63)) { str = "Reserved, treat as Unspecified"; }
9569 else if ((value >= 71) && (value <= 219)) { str = "Reserved, treat as Unspecified"; }
9570 else { str = "Reserved for protocol extension, treat as Unspecified"; }
9578 param_trig_type(ASN1_SCK *asn1, proto_tree *tree, guint len)
9583 EXACT_DATA_CHECK(len, 1);
9585 saved_offset = asn1->offset;
9587 asn1_int32_value_decode(asn1, 1, &value);
9589 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9590 saved_offset, asn1->offset - saved_offset,
9593 find_trig_type(value));
9597 param_win_op_cap(ASN1_SCK *asn1, proto_tree *tree, guint len)
9603 saved_offset = asn1->offset;
9605 asn1_int32_value_decode(asn1, 1, &value);
9607 my_decode_bitfield_value(bigbuf, value, 0xf8, 8);
9608 proto_tree_add_text(tree, asn1->tvb,
9609 saved_offset, asn1->offset - saved_offset,
9613 switch ((value & 0x04) >> 2)
9615 case 0x00: str = "Sender does not support PositionRequest OP"; break;
9617 str = "Sender supports PositionRequest OP";
9621 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
9622 proto_tree_add_text(tree, asn1->tvb,
9623 saved_offset, asn1->offset - saved_offset,
9627 switch ((value & 0x02) >> 1)
9629 case 0x00: str = "Sender does not support CallControlDirective OP"; break;
9631 str = "Sender supports CallControlDirective OP";
9635 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
9636 proto_tree_add_text(tree, asn1->tvb,
9637 saved_offset, asn1->offset - saved_offset,
9641 switch (value & 0x01)
9643 case 0x00: str = "Sender does not support ConnectResource, DisconnectResource, ConnectionFailureReport and ResetTimer (SSFT timer) OPs"; break;
9645 str = "Sender supports ConnectResource, DisconnectResource, ConnectionFailureReport and ResetTimer (SSFT timer) OPs";
9649 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
9650 proto_tree_add_text(tree, asn1->tvb,
9651 saved_offset, asn1->offset - saved_offset,
9655 EXTRANEOUS_DATA_CHECK(len, 1);
9659 param_win_trig_list(ASN1_SCK *asn1, proto_tree *tree, guint len)
9664 saved_offset = asn1->offset;
9671 asn1_int32_value_decode(asn1, 1, &value);
9676 proto_tree_add_text(tree, asn1->tvb,
9677 saved_offset, asn1->offset - saved_offset,
9684 proto_tree_add_text(tree, asn1->tvb,
9685 saved_offset, asn1->offset - saved_offset,
9692 proto_tree_add_text(tree, asn1->tvb,
9693 saved_offset, asn1->offset - saved_offset,
9700 proto_tree_add_text(tree, asn1->tvb,
9701 saved_offset, asn1->offset - saved_offset,
9708 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
9709 saved_offset, asn1->offset - saved_offset,
9713 find_trig_type(value));
9718 saved_offset = asn1->offset;
9721 while ((len - i) > 0);
9725 param_trans_cap(ASN1_SCK *asn1, proto_tree *tree, guint len)
9732 saved_offset = asn1->offset;
9734 asn1_int32_value_decode(asn1, 1, &value);
9736 switch ((value & 0x80) >> 7)
9738 case 0x00: str = "System is not capable of supporting CNAP/CNAR (NAMI)"; break;
9740 str = "System is capable of supporting CNAP/CNAR (NAMI)";
9744 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
9745 proto_tree_add_text(tree, asn1->tvb,
9746 saved_offset, asn1->offset - saved_offset,
9750 switch ((value & 0x40) >> 6)
9752 case 0x00: str = "System is not capable of supporting NDSS"; break;
9754 str = "System is capable of supporting NDSS";
9758 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
9759 proto_tree_add_text(tree, asn1->tvb,
9760 saved_offset, asn1->offset - saved_offset,
9764 switch ((value & 0x20) >> 5)
9766 case 0x00: str = "System is not capable of supporting User Zones (UZCI)"; break;
9768 str = "System is capable of supporting User Zones (UZCI)";
9772 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
9773 proto_tree_add_text(tree, asn1->tvb,
9774 saved_offset, asn1->offset - saved_offset,
9778 switch ((value & 0x10) >> 4)
9780 case 0x00: str = "System is not capable of supporting local SPINI"; break;
9782 str = "System is capable of supporting local SPINI";
9786 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
9787 proto_tree_add_text(tree, asn1->tvb,
9788 saved_offset, asn1->offset - saved_offset,
9792 switch ((value & 0x08) >> 3)
9794 case 0x00: str = "System is not capable of interacting with the user (RUI)"; break;
9796 str = "System is capable of interacting with the user (RUI)";
9800 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
9801 proto_tree_add_text(tree, asn1->tvb,
9802 saved_offset, asn1->offset - saved_offset,
9806 switch ((value & 0x04) >> 2)
9808 case 0x00: str = "System is not capable of honoring the Announcement List parameter (ANN)"; break;
9810 str = "System is capable of honoring the Announcement List parameter (ANN)";
9814 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
9815 proto_tree_add_text(tree, asn1->tvb,
9816 saved_offset, asn1->offset - saved_offset,
9820 switch ((value & 0x02) >> 1)
9822 case 0x00: str = "System is not capable of detecting a busy condition (BUSY)"; break;
9824 str = "System is capable of detecting a busy condition (BUSY)";
9828 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
9829 proto_tree_add_text(tree, asn1->tvb,
9830 saved_offset, asn1->offset - saved_offset,
9834 switch (value & 0x01)
9836 case 0x00: str = "System is not capable of supporting the IS-41-C profile parameter (PROFILE)"; break;
9838 str = "System is capable of supporting the IS-41-C profile parameter (PROFILE)";
9842 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
9843 proto_tree_add_text(tree, asn1->tvb,
9844 saved_offset, asn1->offset - saved_offset,
9848 if (len == 1) return;
9850 saved_offset = asn1->offset;
9852 asn1_int32_value_decode(asn1, 1, &value);
9854 switch ((value & 0x80) >> 7)
9856 case 0x00: str = "System is not capable of supporting the CDMA Over the Air Parameter Administration"; break;
9858 str = "System is capable of supporting the CDMA Over the Air Parameter Administration";
9862 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
9863 proto_tree_add_text(tree, asn1->tvb,
9864 saved_offset, asn1->offset - saved_offset,
9868 switch ((value & 0x40) >> 6)
9870 case 0x00: str = "System is not capable of supporting lower layer segmentation & reassembly (S&R)"; break;
9872 str = "System is capable of supporting lower layer segmentation & reassembly (S&R)";
9876 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
9877 proto_tree_add_text(tree, asn1->tvb,
9878 saved_offset, asn1->offset - saved_offset,
9882 switch ((value & 0x20) >> 5)
9884 case 0x00: str = "System is not capable of supporting the Trigger Address List parameter (WADDR)"; break;
9886 str = "System is capable of supporting the Trigger Address List parameter (WADDR)";
9890 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
9891 proto_tree_add_text(tree, asn1->tvb,
9892 saved_offset, asn1->offset - saved_offset,
9896 switch ((value & 0x10) >> 4)
9898 case 0x00: str = "System is not capable of supporting the Termination List parameter (TL)"; break;
9900 str = "System is capable of supporting the Termination List parameter (TL)";
9904 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
9905 proto_tree_add_text(tree, asn1->tvb,
9906 saved_offset, asn1->offset - saved_offset,
9910 p = my_decode_bitfield_value(bigbuf, value, 0x0f, 8);
9911 switch (value & 0x0f)
9913 case 0x00: strcat(p, " : System cannot accept a termination at this time"); break;
9915 sprintf(p, " : System supports %d call leg(s)", value & 0x0f);
9919 proto_tree_add_text(tree, asn1->tvb,
9920 saved_offset, asn1->offset - saved_offset,
9924 if (len == 2) return;
9926 saved_offset = asn1->offset;
9928 asn1_int32_value_decode(asn1, 1, &value);
9930 my_decode_bitfield_value(bigbuf, value, 0xf8, 8);
9931 proto_tree_add_text(tree, asn1->tvb,
9932 saved_offset, asn1->offset - saved_offset,
9936 switch ((value & 0x04) >> 2)
9938 case 0x00: str = "The system is not capable of supporting external MAHO requests"; break;
9940 str = "The system is capable of supporting external MAHO requests (e.g. for positioning)";
9944 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
9945 proto_tree_add_text(tree, asn1->tvb,
9946 saved_offset, asn1->offset - saved_offset,
9950 my_decode_bitfield_value(bigbuf, value, 0x03, 8);
9951 proto_tree_add_text(tree, asn1->tvb,
9952 saved_offset, asn1->offset - saved_offset,
9956 EXTRANEOUS_DATA_CHECK(len, 3);
9960 param_spini_trig(ASN1_SCK *asn1, proto_tree *tree, guint len)
9966 SHORT_DATA_CHECK(len, 4);
9968 saved_offset = asn1->offset;
9970 asn1_int32_value_decode(asn1, 1, &value);
9972 switch ((value & 0x80) >> 7)
9974 case 0x00: str = "Trigger is not active"; break;
9976 str = "Execute local SPINI procedures for any Revertive Call attempt"; break;
9980 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
9981 proto_tree_add_text(tree, asn1->tvb,
9982 saved_offset, asn1->offset - saved_offset,
9983 "%s : Revertive Call (RvtC), %s",
9986 switch ((value & 0x40) >> 6)
9988 case 0x00: str = "Trigger is not active"; break;
9990 str = "Execute local SPINI procedures for any call attempt to an unrecognized number"; break;
9994 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
9995 proto_tree_add_text(tree, asn1->tvb,
9996 saved_offset, asn1->offset - saved_offset,
9997 "%s : Unrecognized Number (Unrec), %s",
10000 switch ((value & 0x20) >> 5)
10002 case 0x00: str = "Trigger is not active"; break;
10004 str = "Execute local SPINI procedures for any call attempt outside of the current World Zone (as defined in ITU-T Rec. E.164)";
10008 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
10009 proto_tree_add_text(tree, asn1->tvb,
10010 saved_offset, asn1->offset - saved_offset,
10011 "%s : World Zone (WZ), %s",
10014 switch ((value & 0x10) >> 4)
10016 case 0x00: str = "Trigger is not active"; break;
10018 str = "Execute local SPINI procedures for any international call attempt";
10022 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
10023 proto_tree_add_text(tree, asn1->tvb,
10024 saved_offset, asn1->offset - saved_offset,
10025 "%s : International (Intl), %s",
10028 switch ((value & 0x08) >> 3)
10030 case 0x00: str = "Trigger is not active"; break;
10032 str = "Execute local SPINI procedures for any toll calls outside the local carrier's serving area";
10036 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
10037 proto_tree_add_text(tree, asn1->tvb,
10038 saved_offset, asn1->offset - saved_offset,
10039 "%s : Non-Local (Inter-LATA) Toll (NLTOLL/OLATA), %s",
10042 switch ((value & 0x04) >> 2)
10044 case 0x00: str = "Trigger is not active"; break;
10046 str = "Execute local SPINI procedures for any local toll call attempt. Refers to intra-LATA toll within the NANP";
10050 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
10051 proto_tree_add_text(tree, asn1->tvb,
10052 saved_offset, asn1->offset - saved_offset,
10053 "%s : Local (Intra-LATA) Toll (LTOLL/ILATA), %s",
10056 switch ((value & 0x02) >> 1)
10058 case 0x00: str = "Trigger is not active"; break;
10060 str = "Execute local SPINI procedures for any local call attempt";
10064 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
10065 proto_tree_add_text(tree, asn1->tvb,
10066 saved_offset, asn1->offset - saved_offset,
10070 switch (value & 0x01)
10072 case 0x00: str = "Trigger is not active"; break;
10074 str = "Execute local SPINI procedures for any call attempt. This overrides all other values.";
10078 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
10079 proto_tree_add_text(tree, asn1->tvb,
10080 saved_offset, asn1->offset - saved_offset,
10081 "%s : All Origination (All), %s",
10084 saved_offset = asn1->offset;
10086 asn1_int32_value_decode(asn1, 1, &value);
10088 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
10089 proto_tree_add_text(tree, asn1->tvb,
10090 saved_offset, asn1->offset - saved_offset,
10094 switch ((value & 0x10) >> 4)
10096 case 0x00: str = "Trigger is not active"; break;
10098 str = "Execute local SPINI procedures for any number matching a criteria of a prior agreement";
10102 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
10103 proto_tree_add_text(tree, asn1->tvb,
10104 saved_offset, asn1->offset - saved_offset,
10105 "%s : Prior Agreement (PA), %s",
10108 switch ((value & 0x08) >> 3)
10110 case 0x00: str = "Trigger is not active"; break;
10112 str = "Execute local SPINI procedures for any number beginning with two Pound ## digits";
10116 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
10117 proto_tree_add_text(tree, asn1->tvb,
10118 saved_offset, asn1->offset - saved_offset,
10119 "%s : Double Pound (DP), %s",
10122 switch ((value & 0x04) >> 2)
10124 case 0x00: str = "Trigger is not active"; break;
10126 str = "Execute local SPINI procedures for any number beginning with a Pound # digit";
10130 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
10131 proto_tree_add_text(tree, asn1->tvb,
10132 saved_offset, asn1->offset - saved_offset,
10136 switch ((value & 0x02) >> 1)
10138 case 0x00: str = "Trigger is not active"; break;
10140 str = "Execute local SPINI procedures for any number beginning with two Star ** digits";
10144 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
10145 proto_tree_add_text(tree, asn1->tvb,
10146 saved_offset, asn1->offset - saved_offset,
10147 "%s : Double Star (DS), %s",
10150 switch (value & 0x01)
10152 case 0x00: str = "Trigger is not active"; break;
10154 str = "Execute local SPINI procedures for any number beginning with a Star * digit";
10158 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
10159 proto_tree_add_text(tree, asn1->tvb,
10160 saved_offset, asn1->offset - saved_offset,
10164 saved_offset = asn1->offset;
10166 asn1_int32_value_decode(asn1, 1, &value);
10168 switch ((value & 0x80) >> 7)
10170 case 0x00: str = "Trigger is not active"; break;
10172 str = "Execute local SPINI procedures for any call attempt with 7 digits";
10176 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
10177 proto_tree_add_text(tree, asn1->tvb,
10178 saved_offset, asn1->offset - saved_offset,
10179 "%s : 7 digits, %s",
10182 switch ((value & 0x40) >> 6)
10184 case 0x00: str = "Trigger is not active"; break;
10186 str = "Execute local SPINI procedures for any call attempt with 6 digits";
10190 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
10191 proto_tree_add_text(tree, asn1->tvb,
10192 saved_offset, asn1->offset - saved_offset,
10193 "%s : 6 digits, %s",
10196 switch ((value & 0x20) >> 5)
10198 case 0x00: str = "Trigger is not active"; break;
10200 str = "Execute local SPINI procedures for any call attempt with 5 digits";
10204 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
10205 proto_tree_add_text(tree, asn1->tvb,
10206 saved_offset, asn1->offset - saved_offset,
10207 "%s : 5 digits, %s",
10210 switch ((value & 0x10) >> 4)
10212 case 0x00: str = "Trigger is not active"; break;
10214 str = "Execute local SPINI procedures for any call attempt with 4 digits";
10218 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
10219 proto_tree_add_text(tree, asn1->tvb,
10220 saved_offset, asn1->offset - saved_offset,
10221 "%s : 4 digits, %s",
10224 switch ((value & 0x08) >> 3)
10226 case 0x00: str = "Trigger is not active"; break;
10228 str = "Execute local SPINI procedures for any call attempt with 3 digits";
10232 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
10233 proto_tree_add_text(tree, asn1->tvb,
10234 saved_offset, asn1->offset - saved_offset,
10235 "%s : 3 digits, %s",
10238 switch ((value & 0x04) >> 2)
10240 case 0x00: str = "Trigger is not active"; break;
10242 str = "Execute local SPINI procedures for any call attempt with 2 digits";
10246 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
10247 proto_tree_add_text(tree, asn1->tvb,
10248 saved_offset, asn1->offset - saved_offset,
10249 "%s : 2 digits, %s",
10252 switch ((value & 0x02) >> 1)
10254 case 0x00: str = "Trigger is not active"; break;
10256 str = "Execute local SPINI procedures for any call attempt with 1 digits";
10260 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
10261 proto_tree_add_text(tree, asn1->tvb,
10262 saved_offset, asn1->offset - saved_offset,
10263 "%s : 1 digits, %s",
10266 switch (value & 0x01)
10268 case 0x00: str = "Trigger is not active"; break;
10270 str = "Execute local SPINI procedures for any call attempt with no digits";
10274 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
10275 proto_tree_add_text(tree, asn1->tvb,
10276 saved_offset, asn1->offset - saved_offset,
10277 "%s : No digits, %s",
10280 saved_offset = asn1->offset;
10282 asn1_int32_value_decode(asn1, 1, &value);
10284 switch ((value & 0x80) >> 7)
10286 case 0x00: str = "Trigger is not active"; break;
10288 str = "Execute local SPINI procedures for any call attempt with 15 or more digits";
10292 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
10293 proto_tree_add_text(tree, asn1->tvb,
10294 saved_offset, asn1->offset - saved_offset,
10295 "%s : 15 digits, %s",
10298 switch ((value & 0x40) >> 6)
10300 case 0x00: str = "Trigger is not active"; break;
10302 str = "Execute local SPINI procedures for any call attempt with 14 digits";
10306 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
10307 proto_tree_add_text(tree, asn1->tvb,
10308 saved_offset, asn1->offset - saved_offset,
10309 "%s : 14 digits, %s",
10312 switch ((value & 0x20) >> 5)
10314 case 0x00: str = "Trigger is not active"; break;
10316 str = "Execute local SPINI procedures for any call attempt with 13 digits";
10320 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
10321 proto_tree_add_text(tree, asn1->tvb,
10322 saved_offset, asn1->offset - saved_offset,
10323 "%s : 13 digits, %s",
10326 switch ((value & 0x10) >> 4)
10328 case 0x00: str = "Trigger is not active"; break;
10330 str = "Execute local SPINI procedures for any call attempt with 12 digits";
10334 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
10335 proto_tree_add_text(tree, asn1->tvb,
10336 saved_offset, asn1->offset - saved_offset,
10337 "%s : 12 digits, %s",
10340 switch ((value & 0x08) >> 3)
10342 case 0x00: str = "Trigger is not active"; break;
10344 str = "Execute local SPINI procedures for any call attempt with 11 digits";
10348 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
10349 proto_tree_add_text(tree, asn1->tvb,
10350 saved_offset, asn1->offset - saved_offset,
10351 "%s : 11 digits, %s",
10354 switch ((value & 0x04) >> 2)
10356 case 0x00: str = "Trigger is not active"; break;
10358 str = "Execute local SPINI procedures for any call attempt with 10 digits";
10362 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
10363 proto_tree_add_text(tree, asn1->tvb,
10364 saved_offset, asn1->offset - saved_offset,
10365 "%s : 10 digits, %s",
10368 switch ((value & 0x02) >> 1)
10370 case 0x00: str = "Trigger is not active"; break;
10372 str = "Execute local SPINI procedures for any call attempt with 9 digits";
10376 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
10377 proto_tree_add_text(tree, asn1->tvb,
10378 saved_offset, asn1->offset - saved_offset,
10379 "%s : 9 digits, %s",
10382 switch (value & 0x01)
10384 case 0x00: str = "Trigger is not active"; break;
10386 str = "Execute local SPINI procedures for any call attempt with 8 digits";
10390 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
10391 proto_tree_add_text(tree, asn1->tvb,
10392 saved_offset, asn1->offset - saved_offset,
10393 "%s : 8 digits, %s",
10396 EXTRANEOUS_DATA_CHECK(len, 4);
10400 param_orig_trig(ASN1_SCK *asn1, proto_tree *tree, guint len)
10403 guint saved_offset;
10406 SHORT_DATA_CHECK(len, 4);
10408 saved_offset = asn1->offset;
10410 asn1_int32_value_decode(asn1, 1, &value);
10412 switch ((value & 0x80) >> 7)
10414 case 0x00: str = "Trigger is not active"; break;
10416 str = "Launch an Origination Request for any Revertive Call attempt"; break;
10420 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
10421 proto_tree_add_text(tree, asn1->tvb,
10422 saved_offset, asn1->offset - saved_offset,
10423 "%s : Revertive Call (RvtC), %s",
10426 switch ((value & 0x40) >> 6)
10428 case 0x00: str = "Trigger is not active"; break;
10430 str = "Launch an Origination Request for any call attempt to an unrecognized number"; break;
10434 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
10435 proto_tree_add_text(tree, asn1->tvb,
10436 saved_offset, asn1->offset - saved_offset,
10437 "%s : Unrecognized Number (Unrec), %s",
10440 switch ((value & 0x20) >> 5)
10442 case 0x00: str = "Trigger is not active"; break;
10444 str = "Launch an Origination Request for any call attempt outside of the current World Zone (as defined in ITU-T Rec. E.164)";
10448 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
10449 proto_tree_add_text(tree, asn1->tvb,
10450 saved_offset, asn1->offset - saved_offset,
10451 "%s : World Zone (WZ), %s",
10454 switch ((value & 0x10) >> 4)
10456 case 0x00: str = "Trigger is not active"; break;
10458 str = "Launch an Origination Request for any international call attempt";
10462 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
10463 proto_tree_add_text(tree, asn1->tvb,
10464 saved_offset, asn1->offset - saved_offset,
10465 "%s : International (Intl), %s",
10468 switch ((value & 0x08) >> 3)
10470 case 0x00: str = "Trigger is not active"; break;
10472 str = "Launch an Origination Request for any toll calls outside the local carrier's serving area";
10476 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
10477 proto_tree_add_text(tree, asn1->tvb,
10478 saved_offset, asn1->offset - saved_offset,
10479 "%s : Non-Local (Inter-LATA) Toll (NLTOLL/OLATA), %s",
10482 switch ((value & 0x04) >> 2)
10484 case 0x00: str = "Trigger is not active"; break;
10486 str = "Launch an Origination Request for any local toll call attempt. Refers to intra-LATA toll within the NANP";
10490 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
10491 proto_tree_add_text(tree, asn1->tvb,
10492 saved_offset, asn1->offset - saved_offset,
10493 "%s : Local (Intra-LATA) Toll (LTOLL/ILATA), %s",
10496 switch ((value & 0x02) >> 1)
10498 case 0x00: str = "Trigger is not active"; break;
10500 str = "Launch an Origination Request for any local call attempt";
10504 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
10505 proto_tree_add_text(tree, asn1->tvb,
10506 saved_offset, asn1->offset - saved_offset,
10510 switch (value & 0x01)
10512 case 0x00: str = "Trigger is not active"; break;
10514 str = "Launch an Origination Request for any call attempt. This overrides all other values.";
10518 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
10519 proto_tree_add_text(tree, asn1->tvb,
10520 saved_offset, asn1->offset - saved_offset,
10521 "%s : All Origination (All), %s",
10524 saved_offset = asn1->offset;
10526 asn1_int32_value_decode(asn1, 1, &value);
10528 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
10529 proto_tree_add_text(tree, asn1->tvb,
10530 saved_offset, asn1->offset - saved_offset,
10534 switch ((value & 0x10) >> 4)
10536 case 0x00: str = "Trigger is not active"; break;
10538 str = "Launch an Origination Request for any number matching a criteria of a prior agreement";
10542 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
10543 proto_tree_add_text(tree, asn1->tvb,
10544 saved_offset, asn1->offset - saved_offset,
10545 "%s : Prior Agreement (PA), %s",
10548 switch ((value & 0x08) >> 3)
10550 case 0x00: str = "Trigger is not active"; break;
10552 str = "Launch an Origination Request for any number beginning with two Pound ## digits";
10556 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
10557 proto_tree_add_text(tree, asn1->tvb,
10558 saved_offset, asn1->offset - saved_offset,
10559 "%s : Double Pound (DP), %s",
10562 switch ((value & 0x04) >> 2)
10564 case 0x00: str = "Trigger is not active"; break;
10566 str = "Launch an Origination Request for any number beginning with a Pound # digit";
10570 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
10571 proto_tree_add_text(tree, asn1->tvb,
10572 saved_offset, asn1->offset - saved_offset,
10576 switch ((value & 0x02) >> 1)
10578 case 0x00: str = "Trigger is not active"; break;
10580 str = "Launch an Origination Request for any number beginning with two Star ** digits";
10584 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
10585 proto_tree_add_text(tree, asn1->tvb,
10586 saved_offset, asn1->offset - saved_offset,
10587 "%s : Double Star (DS), %s",
10590 switch (value & 0x01)
10592 case 0x00: str = "Trigger is not active"; break;
10594 str = "Launch an Origination Request for any number beginning with a Star * digit";
10598 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
10599 proto_tree_add_text(tree, asn1->tvb,
10600 saved_offset, asn1->offset - saved_offset,
10604 saved_offset = asn1->offset;
10606 asn1_int32_value_decode(asn1, 1, &value);
10608 switch ((value & 0x80) >> 7)
10610 case 0x00: str = "Trigger is not active"; break;
10612 str = "Launch an Origination Request for any call attempt with 7 digits";
10616 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
10617 proto_tree_add_text(tree, asn1->tvb,
10618 saved_offset, asn1->offset - saved_offset,
10619 "%s : 7 digits, %s",
10622 switch ((value & 0x40) >> 6)
10624 case 0x00: str = "Trigger is not active"; break;
10626 str = "Launch an Origination Request for any call attempt with 6 digits";
10630 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
10631 proto_tree_add_text(tree, asn1->tvb,
10632 saved_offset, asn1->offset - saved_offset,
10633 "%s : 6 digits, %s",
10636 switch ((value & 0x20) >> 5)
10638 case 0x00: str = "Trigger is not active"; break;
10640 str = "Launch an Origination Request for any call attempt with 5 digits";
10644 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
10645 proto_tree_add_text(tree, asn1->tvb,
10646 saved_offset, asn1->offset - saved_offset,
10647 "%s : 5 digits, %s",
10650 switch ((value & 0x10) >> 4)
10652 case 0x00: str = "Trigger is not active"; break;
10654 str = "Launch an Origination Request for any call attempt with 4 digits";
10658 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
10659 proto_tree_add_text(tree, asn1->tvb,
10660 saved_offset, asn1->offset - saved_offset,
10661 "%s : 4 digits, %s",
10664 switch ((value & 0x08) >> 3)
10666 case 0x00: str = "Trigger is not active"; break;
10668 str = "Launch an Origination Request for any call attempt with 3 digits";
10672 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
10673 proto_tree_add_text(tree, asn1->tvb,
10674 saved_offset, asn1->offset - saved_offset,
10675 "%s : 3 digits, %s",
10678 switch ((value & 0x04) >> 2)
10680 case 0x00: str = "Trigger is not active"; break;
10682 str = "Launch an Origination Request for any call attempt with 2 digits";
10686 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
10687 proto_tree_add_text(tree, asn1->tvb,
10688 saved_offset, asn1->offset - saved_offset,
10689 "%s : 2 digits, %s",
10692 switch ((value & 0x02) >> 1)
10694 case 0x00: str = "Trigger is not active"; break;
10696 str = "Launch an Origination Request for any call attempt with 1 digits";
10700 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
10701 proto_tree_add_text(tree, asn1->tvb,
10702 saved_offset, asn1->offset - saved_offset,
10703 "%s : 1 digits, %s",
10706 switch (value & 0x01)
10708 case 0x00: str = "Trigger is not active"; break;
10710 str = "Launch an Origination Request for any call attempt with no digits";
10714 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
10715 proto_tree_add_text(tree, asn1->tvb,
10716 saved_offset, asn1->offset - saved_offset,
10717 "%s : No digits, %s",
10720 saved_offset = asn1->offset;
10722 asn1_int32_value_decode(asn1, 1, &value);
10724 switch ((value & 0x80) >> 7)
10726 case 0x00: str = "Trigger is not active"; break;
10728 str = "Launch an Origination Request for any call attempt with 15 or more digits";
10732 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
10733 proto_tree_add_text(tree, asn1->tvb,
10734 saved_offset, asn1->offset - saved_offset,
10735 "%s : 15 digits, %s",
10738 switch ((value & 0x40) >> 6)
10740 case 0x00: str = "Trigger is not active"; break;
10742 str = "Launch an Origination Request for any call attempt with 14 digits";
10746 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
10747 proto_tree_add_text(tree, asn1->tvb,
10748 saved_offset, asn1->offset - saved_offset,
10749 "%s : 14 digits, %s",
10752 switch ((value & 0x20) >> 5)
10754 case 0x00: str = "Trigger is not active"; break;
10756 str = "Launch an Origination Request for any call attempt with 13 digits";
10760 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
10761 proto_tree_add_text(tree, asn1->tvb,
10762 saved_offset, asn1->offset - saved_offset,
10763 "%s : 13 digits, %s",
10766 switch ((value & 0x10) >> 4)
10768 case 0x00: str = "Trigger is not active"; break;
10770 str = "Launch an Origination Request for any call attempt with 12 digits";
10774 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
10775 proto_tree_add_text(tree, asn1->tvb,
10776 saved_offset, asn1->offset - saved_offset,
10777 "%s : 12 digits, %s",
10780 switch ((value & 0x08) >> 3)
10782 case 0x00: str = "Trigger is not active"; break;
10784 str = "Launch an Origination Request for any call attempt with 11 digits";
10788 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
10789 proto_tree_add_text(tree, asn1->tvb,
10790 saved_offset, asn1->offset - saved_offset,
10791 "%s : 11 digits, %s",
10794 switch ((value & 0x04) >> 2)
10796 case 0x00: str = "Trigger is not active"; break;
10798 str = "Launch an Origination Request for any call attempt with 10 digits";
10802 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
10803 proto_tree_add_text(tree, asn1->tvb,
10804 saved_offset, asn1->offset - saved_offset,
10805 "%s : 10 digits, %s",
10808 switch ((value & 0x02) >> 1)
10810 case 0x00: str = "Trigger is not active"; break;
10812 str = "Launch an Origination Request for any call attempt with 9 digits";
10816 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
10817 proto_tree_add_text(tree, asn1->tvb,
10818 saved_offset, asn1->offset - saved_offset,
10819 "%s : 9 digits, %s",
10822 switch (value & 0x01)
10824 case 0x00: str = "Trigger is not active"; break;
10826 str = "Launch an Origination Request for any call attempt with 8 digits";
10830 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
10831 proto_tree_add_text(tree, asn1->tvb,
10832 saved_offset, asn1->offset - saved_offset,
10833 "%s : 8 digits, %s",
10836 EXTRANEOUS_DATA_CHECK(len, 4);
10840 param_trig_cap(ASN1_SCK *asn1, proto_tree *tree, guint len)
10843 guint saved_offset;
10846 saved_offset = asn1->offset;
10848 asn1_int32_value_decode(asn1, 1, &value);
10850 switch ((value & 0x80) >> 7)
10852 case 0x00: str = "O No Answer (ONA) cannot be armed"; break;
10854 str = "O No Answer (ONA) can be armed";
10858 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
10859 proto_tree_add_text(tree, asn1->tvb,
10860 saved_offset, asn1->offset - saved_offset,
10864 switch ((value & 0x40) >> 6)
10866 case 0x00: str = "O Disconnect (ODISC) cannot be armed"; break;
10868 str = "O Disconnect (ODISC) can be armed";
10872 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
10873 proto_tree_add_text(tree, asn1->tvb,
10874 saved_offset, asn1->offset - saved_offset,
10878 switch ((value & 0x20) >> 5)
10880 case 0x00: str = "O Answer (OANS) cannot be armed"; break;
10882 str = "O Answer (OANS) can be armed";
10886 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
10887 proto_tree_add_text(tree, asn1->tvb,
10888 saved_offset, asn1->offset - saved_offset,
10892 switch ((value & 0x10) >> 4)
10894 case 0x00: str = "Origination Attempt Authorized (OAA) cannot be armed"; break;
10896 str = "Origination Attempt Authorized (OAA) can be armed";
10900 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
10901 proto_tree_add_text(tree, asn1->tvb,
10902 saved_offset, asn1->offset - saved_offset,
10906 switch ((value & 0x08) >> 3)
10908 case 0x00: str = "Revertive Call trigger (RvtC) cannot be armed"; break;
10910 str = "Revertive Call trigger (RvtC) can be armed";
10914 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
10915 proto_tree_add_text(tree, asn1->tvb,
10916 saved_offset, asn1->offset - saved_offset,
10920 switch ((value & 0x04) >> 2)
10922 case 0x00: str = "All Calls trigger (All) cannot be armed"; break;
10924 str = "All Calls trigger (All) can be armed";
10928 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
10929 proto_tree_add_text(tree, asn1->tvb,
10930 saved_offset, asn1->offset - saved_offset,
10934 switch ((value & 0x02) >> 1)
10936 case 0x00: str = "K-digit triggers (K-digit) cannot be armed"; break;
10938 str = "K-digit triggers (K-digit) can be armed";
10942 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
10943 proto_tree_add_text(tree, asn1->tvb,
10944 saved_offset, asn1->offset - saved_offset,
10948 switch (value & 0x01)
10950 case 0x00: str = "Introducing Star/Pound triggers (INIT) cannot be armed"; break;
10952 str = "Introducing Star/Pound triggers (INIT) can be armed";
10956 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
10957 proto_tree_add_text(tree, asn1->tvb,
10958 saved_offset, asn1->offset - saved_offset,
10962 if (len == 1) return;
10964 saved_offset = asn1->offset;
10966 asn1_int32_value_decode(asn1, 1, &value);
10968 switch ((value & 0x80) >> 7)
10970 case 0x00: str = "O Called Party Busy (OBSY) cannot be armed"; break;
10972 str = "O Called Party Busy (OBSY) can be armed";
10976 my_decode_bitfield_value(bigbuf, value, 0x80, 8);
10977 proto_tree_add_text(tree, asn1->tvb,
10978 saved_offset, asn1->offset - saved_offset,
10982 switch ((value & 0x40) >> 6)
10984 case 0x00: str = "Called Routing Address Available (CdRAA) cannot be armed"; break;
10986 str = "Called Routing Address Available (CdRAA) can be armed";
10990 my_decode_bitfield_value(bigbuf, value, 0x40, 8);
10991 proto_tree_add_text(tree, asn1->tvb,
10992 saved_offset, asn1->offset - saved_offset,
10996 switch ((value & 0x20) >> 5)
10998 case 0x00: str = "Initial Termination (IT) cannot be armed"; break;
11000 str = "Initial Termination (IT) can be armed";
11004 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
11005 proto_tree_add_text(tree, asn1->tvb,
11006 saved_offset, asn1->offset - saved_offset,
11010 switch ((value & 0x10) >> 4)
11012 case 0x00: str = "Calling Routing Address Available (CgRAA) cannot be armed"; break;
11014 str = "Calling Routing Address Available (CgRAA) can be armed";
11018 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
11019 proto_tree_add_text(tree, asn1->tvb,
11020 saved_offset, asn1->offset - saved_offset,
11024 switch ((value & 0x08) >> 3)
11026 case 0x00: str = "Advanced Termination trigger (AT) cannot be armed"; break;
11028 str = "Advanced Termination trigger (AT) can be armed";
11032 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
11033 proto_tree_add_text(tree, asn1->tvb,
11034 saved_offset, asn1->offset - saved_offset,
11038 switch ((value & 0x04) >> 2)
11040 case 0x00: str = "Prior Agreement trigger (PA) cannot be armed"; break;
11042 str = "Prior Agreement trigger (PA) can be armed";
11046 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
11047 proto_tree_add_text(tree, asn1->tvb,
11048 saved_offset, asn1->offset - saved_offset,
11052 switch ((value & 0x02) >> 1)
11054 case 0x00: str = "Unrecognized Number trigger (Unrec) cannot be armed"; break;
11056 str = "Unrecognized Number trigger (Unrec) can be armed";
11060 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
11061 proto_tree_add_text(tree, asn1->tvb,
11062 saved_offset, asn1->offset - saved_offset,
11066 switch (value & 0x01)
11068 case 0x00: str = "Call Type triggers (CT) cannot be armed"; break;
11070 str = "Call Type triggers (CT) can be armed";
11074 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
11075 proto_tree_add_text(tree, asn1->tvb,
11076 saved_offset, asn1->offset - saved_offset,
11080 if (len == 2) return;
11082 saved_offset = asn1->offset;
11084 asn1_int32_value_decode(asn1, 1, &value);
11086 my_decode_bitfield_value(bigbuf, value, 0xe0, 8);
11087 proto_tree_add_text(tree, asn1->tvb,
11088 saved_offset, asn1->offset - saved_offset,
11092 switch ((value & 0x10) >> 4)
11094 case 0x00: str = "T Disconnect (TDISC) cannot be armed"; break;
11096 str = "T Disconnect (TDISC) can be armed";
11100 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
11101 proto_tree_add_text(tree, asn1->tvb,
11102 saved_offset, asn1->offset - saved_offset,
11106 switch ((value & 0x08) >> 3)
11108 case 0x00: str = "T Answer (TANS) cannot be armed"; break;
11110 str = "T Answer (TANS) can be armed";
11114 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
11115 proto_tree_add_text(tree, asn1->tvb,
11116 saved_offset, asn1->offset - saved_offset,
11120 switch ((value & 0x04) >> 2)
11122 case 0x00: str = "T No Answer trigger (TNA) cannot be armed"; break;
11124 str = "T No Answer trigger (TNA) can be armed";
11128 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
11129 proto_tree_add_text(tree, asn1->tvb,
11130 saved_offset, asn1->offset - saved_offset,
11134 switch ((value & 0x02) >> 1)
11136 case 0x00: str = "T Busy trigger (TBusy) cannot be armed"; break;
11138 str = "T Busy trigger (TBusy) can be armed";
11142 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
11143 proto_tree_add_text(tree, asn1->tvb,
11144 saved_offset, asn1->offset - saved_offset,
11148 switch (value & 0x01)
11150 case 0x00: str = "Terminating Resource Available triggers (TRA) cannot be armed"; break;
11152 str = "Terminating Resource Available triggers (TRA) can be armed";
11156 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
11157 proto_tree_add_text(tree, asn1->tvb,
11158 saved_offset, asn1->offset - saved_offset,
11162 EXTRANEOUS_DATA_CHECK(len, 3);
11166 param_sys_cap(ASN1_SCK *asn1, proto_tree *tree, guint len)
11169 guint saved_offset;
11172 EXACT_DATA_CHECK(len, 1);
11174 saved_offset = asn1->offset;
11176 asn1_int32_value_decode(asn1, 1, &value);
11178 my_decode_bitfield_value(bigbuf, value, 0xc0, 8);
11179 proto_tree_add_text(tree, asn1->tvb,
11180 saved_offset, asn1->offset - saved_offset,
11184 switch ((value & 0x20) >> 5)
11186 case 0x00: str = "DP is not supported by the system"; break;
11188 str = "DP is supported by the system";
11192 my_decode_bitfield_value(bigbuf, value, 0x20, 8);
11193 proto_tree_add_text(tree, asn1->tvb,
11194 saved_offset, asn1->offset - saved_offset,
11198 switch ((value & 0x10) >> 4)
11200 case 0x00: str = "SSD is not shared with the system for the indicated MS"; break;
11202 str = "SSD is shared with the system for the indicated MS";
11206 my_decode_bitfield_value(bigbuf, value, 0x10, 8);
11207 proto_tree_add_text(tree, asn1->tvb,
11208 saved_offset, asn1->offset - saved_offset,
11212 switch ((value & 0x08) >> 3)
11214 case 0x00: str = "System cannot execute CAVE algorithm"; break;
11216 str = "System can execute CAVE algorithm";
11220 my_decode_bitfield_value(bigbuf, value, 0x08, 8);
11221 proto_tree_add_text(tree, asn1->tvb,
11222 saved_offset, asn1->offset - saved_offset,
11226 switch ((value & 0x04) >> 2)
11228 case 0x00: str = "Voice Privacy is not supported"; break;
11230 str = "Voice Privacy is supported";
11234 my_decode_bitfield_value(bigbuf, value, 0x04, 8);
11235 proto_tree_add_text(tree, asn1->tvb,
11236 saved_offset, asn1->offset - saved_offset,
11240 switch ((value & 0x02) >> 1)
11242 case 0x00: str = "SME is not supported"; break;
11244 str = "SME is supported";
11248 my_decode_bitfield_value(bigbuf, value, 0x02, 8);
11249 proto_tree_add_text(tree, asn1->tvb,
11250 saved_offset, asn1->offset - saved_offset,
11254 switch (value & 0x01)
11256 case 0x00: str = "Authentication parameters were not requested"; break;
11258 str = "Authentication parameters were requested";
11262 my_decode_bitfield_value(bigbuf, value, 0x01, 8);
11263 proto_tree_add_text(tree, asn1->tvb,
11264 saved_offset, asn1->offset - saved_offset,
11270 param_act_code(ASN1_SCK *asn1, proto_tree *tree, guint len)
11273 guint saved_offset;
11276 saved_offset = asn1->offset;
11278 asn1_int32_value_decode(asn1, 1, &value);
11282 case 0: str = "Not used"; break;
11283 case 1: str = "Continue processing"; break;
11284 case 2: str = "Disconnect call"; break;
11285 case 3: str = "Disconnect call leg"; break;
11286 case 4: str = "Conference calling drop last party"; break;
11287 case 5: str = "Bridge call leg(s) to conference call"; break;
11288 case 6: str = "Drop call leg on busy or routing failure"; break;
11289 case 7: str = "Disconnect all call legs"; break;
11290 case 8: str = "Attach MSC to OTAF"; break;
11291 case 9: str = "Initiate Registration Notification"; break;
11292 case 10: str = "Generate Public Encryption values"; break;
11293 case 11: str = "Generate A-Key"; break;
11294 case 12: str = "Perform SSD Update procedure"; break;
11295 case 13: str = "Perform Re-authentication procedure"; break;
11296 case 14: str = "Release TRN"; break;
11297 case 15: str = "Commit A-key"; break;
11298 case 16: str = "Release Resources"; break;
11299 case 17: str = "Record NEWMSID"; break;
11300 case 18: str = "Allocate Resources"; break;
11301 case 19: str = "Generate Authentication Signature"; break;
11302 case 20: str = "Release leg and redirect subscriber"; break;
11303 case 21: str = "Do Not Wait For MS User Level Response"; break;
11305 if ((value >= 22) && (value <= 95)) { str = "Reserved, treat as Continue processing"; }
11306 if ((value >= 96) && (value <= 127)) { str = "Reserved for protocol extension, treat as Continue processing"; }
11307 if ((value >= 128) && (value <= 223)) { str = "Reserved, treat as Disconnect call"; }
11308 else { str = "Reserved for protocol extension, treat as Disconnect call"; }
11312 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
11313 saved_offset, asn1->offset - saved_offset,
11314 "Action Code, %s (%d)",
11318 EXTRANEOUS_DATA_CHECK(len, 1);
11322 param_border_acc(ASN1_SCK *asn1, proto_tree *tree, guint len)
11325 guint saved_offset;
11328 EXACT_DATA_CHECK(len, 1);
11330 saved_offset = asn1->offset;
11332 asn1_int32_value_decode(asn1, 1, &value);
11336 case 0: str = "Not used"; break;
11337 case 1: str = "Border Cell Access"; break;
11339 if ((value >= 2) && (value <= 223)) { str = "Reserved, treat as Border Cell Access"; }
11340 else { str = "Reserved for protocol extension, treat as Border Cell Access"; }
11344 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
11345 saved_offset, asn1->offset - saved_offset,
11346 "Indication, %s (%d)",
11352 param_avail_type(ASN1_SCK *asn1, proto_tree *tree, guint len)
11355 guint saved_offset;
11358 saved_offset = asn1->offset;
11360 asn1_int32_value_decode(asn1, 1, &value);
11364 case 0: str = "Not used"; break;
11365 case 1: str = "Unspecified MS inactivity type"; break;
11367 if ((value >= 2) && (value <= 223)) { str = "Reserved, treat as Unspecified"; }
11368 else { str = "Reserved for protocol extension, treat as Unspecified"; }
11372 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
11373 saved_offset, asn1->offset - saved_offset,
11376 EXTRANEOUS_DATA_CHECK(len, 1);
11380 param_can_type(ASN1_SCK *asn1, proto_tree *tree, guint len)
11383 guint saved_offset;
11386 saved_offset = asn1->offset;
11388 asn1_int32_value_decode(asn1, 1, &value);
11392 case 0: str = "Not used"; break;
11393 case 1: str = "Serving System Option. The serving system may discontinue a call or service in progress at its option."; break;
11394 case 2: str = "Report In Call. The serving system shall continue to provide service when a call or service is in progress and just report its incidence."; break;
11395 case 3: str = "Discontinue. The serving system shall discontinue any call or service in progress, regardless of the MS
\92s qualification, profile or authentication."; break;
11397 if ((value >= 4) && (value <= 223)) { str = "Reserved, treat as Serving System Option"; }
11398 else { str = "Reserved for protocol extension, treat as Serving System Option"; }
11402 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
11403 saved_offset, asn1->offset - saved_offset,
11406 EXTRANEOUS_DATA_CHECK(len, 1);
11410 param_can_den(ASN1_SCK *asn1, proto_tree *tree, guint len)
11413 guint saved_offset;
11416 EXACT_DATA_CHECK(len, 1);
11418 saved_offset = asn1->offset;
11420 asn1_int32_value_decode(asn1, 1, &value);
11424 case 0: str = "Not used"; break;
11425 case 1: str = "Multiple Access"; break;
11426 case 2: str = "Busy"; break;
11428 if ((value >= 3) && (value <= 223)) { str = "Reserved, treat as Multiple Access"; }
11429 else { str = "Reserved for protocol extension, treat as Multiple Access"; }
11433 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
11434 saved_offset, asn1->offset - saved_offset,
11435 "Indication, %s (%d)",
11441 param_acc_den(ASN1_SCK *asn1, proto_tree *tree, guint len)
11444 guint saved_offset;
11447 EXACT_DATA_CHECK(len, 1);
11449 saved_offset = asn1->offset;
11451 asn1_int32_value_decode(asn1, 1, &value);
11455 case 0: str = "Not used"; break;
11456 case 1: str = "Unassigned directory number"; break;
11457 case 2: str = "Inactive"; break;
11458 case 3: str = "Busy"; break;
11459 case 4: str = "Termination denied"; break;
11460 case 5: str = "No Page response"; break;
11461 case 6: str = "Unavailable"; break;
11462 case 7: str = "Service Rejected by MS"; break;
11463 case 8: str = "Service Rejected by the System"; break;
11464 case 9: str = "Service Type Mismatch"; break;
11465 case 10: str = "Service Denied"; break;
11466 case 11: str = "Call Rejected"; break;
11468 if ((value >= 12) && (value <= 223)) { str = "Reserved, treat as Termination denied"; }
11469 else { str = "Reserved for protocol extension, treat as Termination denied"; }
11473 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
11474 saved_offset, asn1->offset - saved_offset,
11475 "Access Denied Reason, %s (%d)",
11481 param_sms_acc_den_reason(ASN1_SCK *asn1, proto_tree *tree, guint len)
11484 guint saved_offset;
11487 saved_offset = asn1->offset;
11489 asn1_int32_value_decode(asn1, 1, &value);
11493 case 0: str = "Not used"; break;
11494 case 1: str = "Denied"; break;
11495 case 2: str = "Postponed"; break;
11496 case 3: str = "Unavailable"; break;
11497 case 4: str = "Invalid"; break;
11499 if ((value >= 5) && (value <= 63)) { str = "Reserved, treat as Denied"; }
11500 else if ((value >= 64) && (value <= 127)) { str = "Reserved, treat as Postponed"; }
11501 else if ((value >= 128) && (value <= 223)) { str = "Reserved, treat as Unavailable"; }
11502 else { str = "Reserved for protocol extension, treat as Unavailable"; }
11506 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
11507 saved_offset, asn1->offset - saved_offset,
11508 "Access Denied Reason, %s (%d)",
11512 EXTRANEOUS_DATA_CHECK(len, 1);
11516 param_sms_bd(ASN1_SCK *asn1, proto_tree *tree, guint len)
11518 tvbuff_t *next_tvb;
11521 next_tvb = tvb_new_subset(asn1->tvb, asn1->offset, len, len);
11523 if (ansi_map_sms_tele_id != -1)
11525 dissector_try_port(is637_tele_id_dissector_table, ansi_map_sms_tele_id, next_tvb, g_pinfo, g_tree);
11526 ansi_map_sms_tele_id = -1;
11528 else if (is683_ota)
11530 dissector_try_port(is683_dissector_table, ansi_map_is_invoke ? 0 : 1, next_tvb, g_pinfo, g_tree);
11533 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
11537 asn1->offset += len;
11541 param_sms_cause(ASN1_SCK *asn1, proto_tree *tree, guint len)
11544 guint saved_offset;
11547 saved_offset = asn1->offset;
11549 asn1_int32_value_decode(asn1, 1, &value);
11553 case 0: str = "Address vacant"; break;
11554 case 1: str = "Address translation failure"; break;
11555 case 2: str = "Network resource shortage"; break;
11556 case 3: str = "Network failure"; break;
11557 case 4: str = "Invalid Teleservice ID"; break;
11558 case 5: str = "Other network problem"; break;
11559 case 6: str = "Unsupported network interface"; break;
11560 case 32: str = "No page response"; break;
11561 case 33: str = "Destination busy"; break;
11562 case 34: str = "No acknowledgement"; break;
11563 case 35: str = "Destination resource shortage"; break;
11564 case 36: str = "SMS delivery postponed"; break;
11565 case 37: str = "Destination out of service"; break;
11566 case 38: str = "Destination no longer at this address"; break;
11567 case 39: str = "Other terminal problem"; break;
11568 case 64: str = "Radio interface resource shortage"; break;
11569 case 65: str = "Radio interface incompatibility"; break;
11570 case 66: str = "Other radio interface problem"; break;
11571 case 67: str = "Unsupported Base Station Capability"; break;
11572 case 96: str = "Encoding problem"; break;
11573 case 97: str = "Service origination denied"; break;
11574 case 98: str = "Service termination denied"; break;
11575 case 99: str = "Supplementary service not supported"; break;
11576 case 100: str = "Service not supported"; break;
11577 case 101: str = "Reserved"; break;
11578 case 102: str = "Missing expected parameter"; break;
11579 case 103: str = "Missing mandatory parameter"; break;
11580 case 104: str = "Unrecognized parameter value"; break;
11581 case 105: str = "Unexpected parameter value"; break;
11582 case 106: str = "User Data size error"; break;
11583 case 107: str = "Other general problems"; break;
11584 case 108: str = "Session not active"; break;
11586 if ((value >= 7) && (value <= 31)) { str = "Reserved, treat as Other network problem"; }
11587 else if ((value >= 40) && (value <= 47)) { str = "Reserved, treat as Other terminal problem"; }
11588 else if ((value >= 48) && (value <= 63)) { str = "Reserved, treat as SMS delivery postponed"; }
11589 else if ((value >= 68) && (value <= 95)) { str = "Reserved, treat as Other radio interface problem"; }
11590 else if ((value >= 109) && (value <= 223)) { str = "Reserved, treat as Other general problems"; }
11591 else { str = "Reserved for protocol extension, treat as Other general problems"; }
11595 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
11596 saved_offset, asn1->offset - saved_offset,
11601 EXTRANEOUS_DATA_CHECK(len, 1);
11605 param_cdma_soci(ASN1_SCK *asn1, proto_tree *tree, guint len)
11608 guint saved_offset;
11610 saved_offset = asn1->offset;
11612 asn1_int32_value_decode(asn1, 1, &value);
11614 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
11615 saved_offset, asn1->offset - saved_offset,
11619 EXTRANEOUS_DATA_CHECK(len, 1);
11623 param_int(ASN1_SCK *asn1, proto_tree *tree, guint len)
11626 guint saved_offset;
11630 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
11631 asn1->offset, len, "Long Data (?)");
11632 asn1->offset += len;
11636 saved_offset = asn1->offset;
11638 asn1_int32_value_decode(asn1, len, &value);
11640 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
11641 saved_offset, asn1->offset - saved_offset,
11647 param_pc_ssn(ASN1_SCK *asn1, proto_tree *tree, guint len)
11649 gint32 value, b1, b2, b3, b4;
11650 guint saved_offset;
11653 EXACT_DATA_CHECK(len, 5);
11655 saved_offset = asn1->offset;
11657 asn1_int32_value_decode(asn1, 1, &value);
11661 case 0: str = "Not specified"; break;
11662 case 1: str = "Serving MSC"; break;
11663 case 2: str = "Home MSC"; break;
11664 case 3: str = "Gateway MSC"; break;
11665 case 4: str = "HLR"; break;
11666 case 5: str = "VLR"; break;
11667 case 6: str = "EIR (reserved)"; break;
11668 case 7: str = "AC"; break;
11669 case 8: str = "Border MSC"; break;
11670 case 9: str = "Originating MSC"; break;
11672 if ((value >= 10) && (value <= 223)) { str = "Reserved, treat as Not specified"; }
11673 else { str = "Reserved for protocol extension, treat as Not specified"; }
11677 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
11678 saved_offset, asn1->offset - saved_offset,
11683 asn1_int32_value_decode(asn1, 1, &b1);
11684 asn1_int32_value_decode(asn1, 1, &b2);
11685 asn1_int32_value_decode(asn1, 1, &b3);
11686 asn1_int32_value_decode(asn1, 1, &b4);
11688 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
11689 saved_offset, asn1->offset - saved_offset,
11690 "Point Code %d-%d-%d SSN %d",
11695 param_lai(ASN1_SCK *asn1, proto_tree *tree, guint len)
11698 guint saved_offset;
11700 EXACT_DATA_CHECK(len, 2);
11702 saved_offset = asn1->offset;
11704 asn1_int32_value_decode(asn1, 2, &value);
11706 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
11707 saved_offset, asn1->offset - saved_offset,
11714 param_list(ASN1_SCK *asn1, proto_tree *tree, guint len)
11716 guint saved_offset;
11718 saved_offset = asn1->offset;
11720 while (len > (asn1->offset - saved_offset))
11722 if (!dissect_ansi_param(asn1, tree))
11724 proto_tree_add_text(tree,
11725 asn1->tvb, asn1->offset, len - (asn1->offset - saved_offset),
11726 "Unknown Parameter Data");
11728 asn1->offset = saved_offset + len;
11735 #define NUM_PARAM_1 (sizeof(ansi_param_1_strings)/sizeof(value_string))
11736 static gint ett_ansi_param_1[NUM_PARAM_1];
11737 static void (*param_1_fcn[])(ASN1_SCK *asn1, proto_tree *tree, guint len) = {
11738 param_bill_id, /* Billing ID */
11739 param_int, /* Serving Cell ID */
11740 param_int, /* Target Cell ID */
11741 param_digits, /* Digits */
11742 param_chan_data, /* Channel Data */
11743 param_cic, /* Inter MSC Circuit ID */
11744 param_int, /* Inter Switch Count */
11745 param_min, /* Mobile Identification Number */
11746 param_esn, /* Electronic Serial Number */
11747 param_rel_reason, /* Release Reason */
11748 param_sig_qual, /* Signal Quality */
11749 param_scm, /* Station Class Mark */
11750 param_auth_den, /* Authorization Denied */
11751 param_auth_per, /* Authorization Period */
11752 param_seizure, /* Seizure Type */
11753 param_trunk_stat, /* Trunk Status */
11754 param_qic, /* Qualification Information Code */
11755 param_feat_result, /* Feature Result */
11756 param_red_reason, /* Redirection Reason */
11757 param_acc_den, /* Access Denied Reason */
11758 param_mscid, /* MSCID */
11759 param_sys_type_code, /* System My Type Code */
11760 param_orig_ind, /* Origination Indicator */
11761 param_term_res, /* Termination Restriction Code */
11762 param_calling_feat_ind, /* Calling Features Indicator */
11763 param_faulty, /* Faulty Parameter */
11764 param_usage_ind, /* Usage Indicator */
11765 param_tdma_chan_data, /* TDMA Channel Data */
11766 param_tdma_call_mode, /* TDMA Call Mode */
11767 param_ho_reason, /* Handoff Reason */
11772 #define NUM_PARAM_2 (sizeof(ansi_param_2_strings)/sizeof(value_string))
11773 static gint ett_ansi_param_2[NUM_PARAM_2];
11774 static void (*param_2_fcn[])(ASN1_SCK *asn1, proto_tree *tree, guint len) = {
11775 param_tdma_burst_ind, /* TDMA Burst Indicator */
11776 param_pc_ssn, /* PC_SSN */
11777 param_lai, /* Location Area ID */
11778 param_sys_acc_type, /* System Access Type */
11779 param_auth_resp_all, /* Authentication Response */
11780 param_auth_resp_all, /* Authentication Response Base Station */
11781 param_auth_resp_all, /* Authentication Response Unique Challenge */
11782 param_int, /* Call History Count */
11783 param_confid_mode, /* Confidentiality Modes */
11784 param_int, /* Random Variable */
11785 param_int, /* Random Variable Base station */
11786 param_rand_ssd, /* Random Variable SSD */
11787 param_rand_unique, /* Random Variable Unique Challenge */
11788 param_report_type, /* Report Type */
11789 param_sme_key, /* Signaling Message Encryption Key */
11790 param_ssd, /* Shared Secret Data */
11791 param_term_type, /* Terminal Type */
11792 param_vpmask, /* Voice Privacy Mask */
11793 param_sys_cap, /* System Capabilities */
11794 param_deny_acc, /* Deny Access */
11795 param_upd_count, /* Update Count */
11796 param_ssd_no_share, /* SSD Not Shared */
11797 param_ext_mscid, /* Extended MSCID */
11798 param_ext_sys_type_code, /* Extended System My Type Code */
11799 param_ctrl_chan_data, /* Control Channel Data */
11800 param_sys_acc_data, /* System Access Data */
11801 param_can_den, /* Cancellation Denied */
11802 param_border_acc, /* Border Cell Access */
11803 param_cdma_scm, /* CDMA Station Class Mark */
11804 param_int, /* CDMA Serving One Way Delay */
11805 param_int, /* CDMA Target One Way Delay */
11806 param_cdma_call_mode, /* CDMA Call Mode */
11807 param_cdma_chan_data, /* CDMA Channel Data */
11808 param_cdma_sig_qual, /* CDMA Signal Quality */
11809 param_cdma_pilot_strength, /* CDMA Pilot Strength */
11810 param_mob_rev, /* CDMA Mobile Protocol Revision */
11811 param_cdma_plcm, /* CDMA Private Long Code Mask */
11812 param_cdma_code_chan, /* CDMA Code Channel */
11813 param_cdma_sea_win, /* CDMA Search Window */
11814 param_ms_loc, /* MS Location */
11815 param_page_ind, /* Page Indicator */
11816 param_rec_sig_qual, /* Received Signal Quality */
11817 param_dereg, /* Deregistration Type */
11818 param_namps_chan_data, /* NAMPS Channel Data */
11819 param_alert_code, /* Alert Code */
11820 param_ann_code, /* Announcement Code */
11821 param_aav, /* Authentication Algorithm Version */
11822 param_auth_cap, /* Authentication Capability */
11823 param_int, /* Call History Count Expected */
11824 param_digits, /* Calling Party Number Digits 1 */
11825 param_digits, /* Calling Party Number Digits 2 */
11826 param_digits, /* Calling Party Number String 1 */
11827 param_digits, /* Calling Party Number String 2 */
11828 param_sub_addr, /* Calling Party Subaddress */
11829 param_can_type, /* Cancellation Type */
11830 param_digits, /* Carrier Digits */
11831 param_digits, /* Destination Digits */
11832 param_dmh_red_ind, /* DMH Redirection Indicator */
11833 param_list, /* Inter System Termination */
11834 param_avail_type, /* Availability Type */
11835 param_list, /* Local Termination */
11836 param_mw_noti_count, /* Message Waiting Notification Count */
11837 param_digits, /* Mobile Directory Number */
11838 param_digits, /* MSCID Number */
11839 param_list, /* PSTN Termination */
11840 param_no_ans_time, /* No Answer Time */
11841 param_otfi, /* One Time Feature Indicator */
11842 param_orig_trig, /* Origination Triggers */
11843 param_randc, /* RANDC */
11844 param_digits, /* Redirecting Number Digits */
11845 param_digits, /* Redirecting Number String */
11846 param_sub_addr, /* Redirecting Number Subaddress */
11847 param_digits, /* Sender Identification Number */
11848 param_digits, /* SMS Address */
11849 param_sms_bd, /* SMS Bearer Data */
11850 param_sms_charge_ind, /* SMS Charge Indicator */
11851 param_digits, /* SMS Destination Address */
11852 param_sms_msg_count, /* SMS Message Count */
11853 param_sms_noti, /* SMS Notification Indicator */
11854 param_digits, /* SMS Original Destination Address */
11855 param_sub_addr, /* SMS Original Destination Subaddress */
11856 param_digits, /* SMS Original Originating Address */
11857 param_sub_addr, /* SMS Original Originating Subaddress */
11858 param_digits, /* SMS Originating Address */
11859 param_sms_orig_restric, /* SMS Originating Restrictions */
11860 param_sms_tele, /* SMS Teleservice Identifier */
11861 param_sms_term_restric, /* SMS Termination Restrictions */
11862 NULL/* no data */, /* SMS Message Waiting Indicator */
11863 param_term_acc_type, /* Termination Access Type */
11864 param_list, /* Termination List */
11865 param_term_treat, /* Termination Treatment */
11866 param_term_trig, /* Termination Triggers */
11867 param_trans_cap, /* Transaction Capability */
11868 param_unique_chal_rep, /* Unique Challenge Report */
11873 #define NUM_PARAM_3 (sizeof(ansi_param_3_strings)/sizeof(value_string))
11874 static gint ett_ansi_param_3[NUM_PARAM_3];
11875 static void (*param_3_fcn[])(ASN1_SCK *asn1, proto_tree *tree, guint len) = {
11876 param_act_code, /* Action Code */
11877 param_alert_res, /* Alert Result */
11878 param_list, /* Announcement List */
11879 param_list, /* CDMA Code Channel Information */
11880 param_list, /* CDMA Code Channel List */
11881 param_list, /* CDMA Target Measurement Information */
11882 param_list, /* CDMA Target Measurement List */
11883 param_list, /* CDMA Target MAHO Information */
11884 param_list, /* CDMA Target MAHO List */
11885 param_conf_call_ind, /* Conference Calling Indicator */
11886 param_count_upd_report, /* Count Update Report */
11887 param_digit_collect_ctrl, /* Digit Collection Control */
11888 param_digits, /* DMH Account Code Digits */
11889 param_digits, /* DMH Alternate Billing Digits */
11890 param_digits, /* DMH Billing Digits */
11891 param_geo_auth, /* Geographic Authorization */
11892 param_int, /* Leg Information */
11893 param_mw_noti_type, /* Message Waiting Notification Type */
11894 param_paca_ind, /* PACA Indicator */
11895 param_pref_lang_ind, /* Preferred Language Indicator */
11896 param_rand_valtime, /* Random Valid Time */
11897 param_digits, /* Restriction Digits */
11898 param_digits, /* Routing Digits */
11899 param_setup_result, /* Setup Result */
11900 param_sms_acc_den_reason, /* SMS Access Denied Reason */
11901 param_sms_cause, /* SMS Cause Code */
11902 param_digits, /* SPINI PIN */
11903 param_spini_trig, /* SPINI Triggers */
11904 param_ssd_upd_report, /* SSD Update Report */
11905 param_list, /* Target Measurement Information */
11906 param_list, /* Target Measurement List */
11907 param_digits, /* Voice Mailbox PIN */
11908 param_digits, /* Voice Mailbox Number */
11909 NULL/* no special handling */, /* Authentication Data */
11910 param_cond_den_reason, /* Conditionally Denied Reason */
11911 param_group_info, /* Group Information */
11912 param_ho_state, /* Handoff State */
11913 param_namps_call_mode, /* NAMPS Call Mode */
11914 param_cdma_sci, /* CDMA Slot Cycle Index */
11915 param_den_auth_per, /* Denied Authorization Period */
11916 param_digits, /* Pilot Number */
11917 param_bill_id, /* Pilot Billing ID */
11918 param_cdma_band_class, /* CDMA Band Class */
11919 param_imsi, /* International Mobile Subscriber Identity */
11920 param_calling_party_name, /* Calling Party Name */
11921 param_dis_text, /* Display Text */
11922 param_red_party_name, /* Redirecting Party Name */
11923 param_srvc_id, /* Service ID */
11924 param_all_or_none, /* All Or None */
11925 param_change, /* Change */
11926 param_list, /* Data Access Element */
11927 param_list, /* Data Access Element List */
11928 param_list, /* Data Update Result */
11929 param_list, /* Data Update Result List */
11930 param_cdma_pilot_pn, /* CDMA Pilot PN */
11931 NULL/* no special handling */, /* CDMA Service Configuration Record */
11932 param_cdma_so, /* CDMA Service Option */
11933 param_cdma_scm2, /* CDMA Station Class Mark 2 */
11934 param_tdma_sc, /* TDMA Service Code */
11935 param_tdma_term_cap, /* TDMA Terminal Capability */
11936 param_tdma_voice_coder, /* TDMA Voice Coder */
11937 param_a_key_ver, /* A-Key Protocol Version */
11938 NULL/* XXX what spec ? */, /* Authentication Response Reauthentication */
11939 NULL/* no special handling */, /* Base Station Partial Key */
11940 param_min, /* Mobile Station MIN */
11941 NULL/* no special handling */, /* Mobile Station Partial Key */
11942 NULL/* no special handling */, /* Modulus Value */
11943 param_min, /* Newly Assigned MIN */
11944 param_ota_result_code, /* OTASP Result Code */
11945 NULL/* no special handling */, /* Primitive Value */
11946 NULL/* XXX what spec ? */, /* Random Variable Reauthentication */
11947 NULL/* XXX what spec ? */, /* Reauthentication Report */
11948 param_srvc_ind, /* Service Indicator */
11949 param_sme_report, /* Signaling Message Encryption Report */
11950 param_trn, /* Temporary Reference Number */
11951 param_vp_report, /* Voice Privacy Report */
11952 param_ctrl_chan_mode, /* Control Channel Mode */
11953 NULL/* no special handling */, /* CDMA Connection Reference */
11954 param_list, /* CDMA Connection Reference Information */
11955 param_list, /* CDMA Connection Reference List */
11956 param_change_srvc_attr, /* Change Service Attributes */
11957 NULL/* no special handling */, /* Data Key */
11958 param_dp_params, /* Data Privacy Parameters */
11959 param_islp_info, /* ISLP Information */
11960 param_reason_list, /* Reason List */
11961 param_tdma_bandwidth, /* TDMA Bandwidth */
11962 param_tdma_data_feat_ind, /* TDMA Data Features Indicator */
11963 param_tdma_data_mode, /* TDMA Data Mode */
11964 param_tdma_voice_mode, /* TDMA Voice Mode */
11965 param_ana_red_info, /* Analog Redirect Info */
11966 param_list, /* CDMA Band Class Information */
11967 param_list, /* CDMA Band Class List */
11968 param_list, /* CDMA Service Option List */
11969 param_list, /* CDMA Connection Reference Information */
11970 param_list, /* CDMA Connection Reference List */
11971 param_list, /* Analog Redirect Record */
11972 param_list, /* Execute Script */
11973 param_list, /* Modification Request */
11974 param_list, /* Modification Request List */
11975 param_list, /* Modification Result List */
11976 param_list, /* Service Data Access Element */
11977 param_list, /* Service Data Access Element List */
11978 param_list, /* Service Data Result */
11979 param_list, /* Service Data Result List */
11980 param_list, /* Trigger Address List */
11981 param_list, /* Trigger List */
11982 param_list, /* WIN Capability */
11983 param_list, /* Call Recovery ID */
11984 param_list, /* Call Recovery ID List */
11985 param_list, /* Position Information */
11986 param_list, /* CDMA PSMM List */
11987 param_cdma_chan_num, /* CDMA Channel Number */
11988 param_list, /* CDMA Channel Number List */
11989 param_cdma_pci, /* CDMA Power Combined Indicator */
11990 param_list, /* CDMA Redirect Record */
11991 param_cdma_sea_param, /* CDMA Search Parameters */
11992 param_int, /* CDMA Network Identification */
11993 param_network_tmsi, /* Network TMSI */
11994 param_int, /* Network TMSI Expiration Time */
11995 param_network_tmsi, /* New Network TMSI */
11996 param_reqd_param_mask, /* Required Parameters Mask */
11997 param_srvc_red_cause, /* Service Redirection Cause */
11998 param_srvc_red_info, /* Service Redirection Info */
11999 param_roaming_ind, /* Roaming Indication */
12000 NULL/* XXX what spec ? */, /* MSID */
12001 NULL/* no special handling */, /* Data ID */
12002 NULL/* no special handling */, /* Database Key */
12003 param_data_result, /* Data Result */
12004 NULL/* no special handling */, /* Data Value */
12005 param_fail_cause, /* Failure Cause */
12006 param_fail_type, /* Failure Type */
12007 NULL/* no special handling */, /* Global Title */
12008 NULL/* no special handling */, /* Private Specialized Resource */
12009 param_resume_pic, /* Resume PIC */
12010 NULL/* no special handling */, /* Script Argument */
12011 NULL/* no special handling */, /* Script Name */
12012 NULL/* no special handling */, /* Script Result */
12013 param_special_rsc, /* Specialized Resource */
12014 param_time_date_offset, /* Time Date Offset */
12015 param_trig_cap, /* Trigger Capability */
12016 param_trig_type, /* Trigger Type */
12017 param_win_op_cap, /* WIN Operations Capability */
12018 param_win_trig_list, /* WIN Trigger List */
12019 param_digits, /* MSC Address */
12020 param_sus_acc, /* Suspicious Access */
12021 param_imsi, /* Mobile Station IMSI */
12022 param_imsi, /* Newly Assigned IMSI */
12023 NULL/* XXX what spec ? */, /* Command Code */
12024 param_dis_text2, /* Display Text 2 */
12025 NULL/* XXX what spec ? */, /* Page Count */
12026 NULL/* XXX what spec ? */, /* Page Response Time */
12027 NULL/* XXX what spec ? */, /* SMS Transaction ID */
12028 param_dmh_srvc_id, /* DMH Service ID */
12029 param_feat_ind, /* Feature Indicator */
12030 param_mscid, /* Control Network ID */
12031 param_rel_cause, /* Release Cause */
12032 param_time_day, /* Time Of Day */
12033 param_call_status, /* Call Status */
12034 NULL/* no special handling */, /* DMH Charge Information */
12035 NULL/* no special handling */, /* DMH Billing Indicator */
12036 param_ms_status, /* MS Status */
12037 param_pos_info_code, /* Position Information Code */
12038 param_inter_msg_time, /* Inter Message Time */
12039 param_msid_usage, /* MSID Usage */
12040 param_new_min_ext, /* New MIN Extension */
12041 param_dtx_ind, /* DTX Indication */
12042 param_cdma_mob_cap, /* CDMA Mobile Capabilities */
12043 param_gen_time, /* Generalized Time */
12044 param_digits, /* Generic Digits */
12045 param_geo_pos, /* Geographic Position */
12046 param_mob_call_status, /* Mobile Call Status */
12047 param_mob_cap, /* Mobile Position Capability */
12048 param_pos_req_type, /* Position Request Type */
12049 param_pos_result, /* Position Result */
12050 param_pos_source, /* Position Source */
12051 param_acg_encounter, /* ACG Encountered */
12052 param_ctrl_type, /* CDMA State/Control Type */
12053 param_gap_duration, /* Gap Duration */
12054 param_scf_overload_gap_int, /* SCF Overload Gap Interval */
12055 param_sm_gap_int, /* Service Management System Gap Interval */
12056 param_cdma_psmm_count, /* CDMA PSMM Count */
12057 param_cdma_sowd2, /* CDMA Serving One Way Delay 2 */
12058 param_qos_pri, /* QoS Priority */
12059 NULL/* no special handling */, /* PDSN Address */
12060 NULL/* no special handling */, /* PDSN Protocol Type */
12061 param_cdma_ms_meas_chan_id, /* CDMA MS Measured Channel Identity */
12062 NULL/* no special handling */, /* Range */
12063 param_calling_party_cat, /* Calling Party Category */
12064 param_cdma2000_ho_ivk_ios, /* cdma2000 Handoff Invoke IOS Data */
12065 param_cdma2000_ho_rsp_ios, /* cdma2000 Handoff Response IOS Data */
12066 param_digits, /* LCS Client ID */
12067 param_tdma_maho_cell_id, /* TDMA MAHO Cell ID */
12068 param_tdma_maho_chan, /* TDMA MAHO Channel */
12069 param_cdma_soci, /* CDMA Service Option Connection Identifier */
12070 param_tdma_time_align, /* TDMA Time Alignment */
12071 param_tdma_maho_req, /* TDMA MAHO Request */
12075 /* GENERIC MAP DISSECTOR FUNCTIONS */
12078 dissect_ansi_map_len(ASN1_SCK *asn1, proto_tree *tree, gboolean *def_len, guint *len)
12080 guint saved_offset;
12084 saved_offset = asn1->offset;
12088 ret = asn1_length_decode(asn1, def_len, len);
12092 proto_tree_add_uint(tree, hf_ansi_map_length, asn1->tvb,
12093 saved_offset, asn1->offset - saved_offset,
12098 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
12099 saved_offset, asn1->offset - saved_offset,
12100 "Length: Indefinite");
12106 check_ansi_map_tag(ASN1_SCK *asn1, guint tag)
12108 guint saved_offset, real_tag;
12111 saved_offset = asn1->offset;
12113 asn1_id_decode1(asn1, &real_tag);
12115 asn1->offset = saved_offset;
12117 return(tag == real_tag);
12121 dissect_ansi_map_octet(ASN1_SCK *asn1, proto_tree *tree, guchar * str)
12123 guint saved_offset;
12127 saved_offset = asn1->offset;
12129 asn1_octet_decode(asn1, &my_oct);
12131 proto_tree_add_uint_format(tree, hf_ansi_map_id, asn1->tvb,
12132 saved_offset, asn1->offset - saved_offset, my_oct,
12137 static proto_tree *
12138 dissect_ansi_map_component(ASN1_SCK *asn1, proto_tree *tree, guint *len_p)
12140 guint saved_offset;
12143 proto_tree *subtree;
12147 saved_offset = asn1->offset;
12148 asn1_id_decode1(asn1, &tag);
12151 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
12152 saved_offset, -1, "Component ID");
12154 subtree = proto_item_add_subtree(item, ett_component);
12156 proto_tree_add_uint_format(subtree, hf_ansi_map_tag, asn1->tvb,
12157 saved_offset, asn1->offset - saved_offset, tag,
12158 "Component ID Identifier");
12160 dissect_ansi_map_len(asn1, subtree, &def_len, len_p);
12162 proto_item_set_len(item, (asn1->offset - saved_offset) + *len_p);
12168 dissect_ansi_opr_code(ASN1_SCK *asn1, packet_info *pinfo, proto_tree *tree)
12170 guint saved_offset = 0;
12177 proto_tree *subtree;
12181 #define TCAP_NAT_OPR_CODE_TAG 0xd0
12182 if (check_ansi_map_tag(asn1, TCAP_NAT_OPR_CODE_TAG))
12184 str = "National TCAP Operation Code Identifier";
12186 #define TCAP_PRIV_OPR_CODE_TAG 0xd1
12187 else if (check_ansi_map_tag(asn1, TCAP_PRIV_OPR_CODE_TAG))
12189 str = "Private TCAP Operation Code Identifier";
12197 saved_offset = asn1->offset;
12198 asn1_id_decode1(asn1, &tag);
12201 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
12202 saved_offset, -1, "Operation Code");
12204 subtree = proto_item_add_subtree(item, ett_opr_code);
12206 proto_tree_add_uint_format(subtree, hf_ansi_map_tag, asn1->tvb,
12207 saved_offset, asn1->offset - saved_offset, tag, str);
12209 dissect_ansi_map_len(asn1, subtree, &def_len, &len);
12210 proto_item_set_len(item, (asn1->offset - saved_offset) + len);
12214 saved_offset = asn1->offset;
12215 asn1_octet_decode(asn1, &my_oct);
12217 #define ANSI_MAP_OPR_FAMILY 0x09
12218 if (my_oct != ANSI_MAP_OPR_FAMILY)
12220 asn1->offset = saved_offset;
12224 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
12225 saved_offset, 1, "Operation Code Family");
12227 saved_offset = asn1->offset;
12228 asn1_int32_value_decode(asn1, len-1, &val);
12229 proto_tree_add_int(subtree, hf_ansi_map_opr_code, asn1->tvb,
12230 saved_offset, asn1->offset - saved_offset, val);
12232 str = match_strval(val, ansi_opr_code_strings);
12234 if (NULL == str) return;
12236 if (check_col(pinfo->cinfo, COL_INFO))
12238 col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", str);
12244 dissect_ansi_problem(ASN1_SCK *asn1, proto_tree *tree)
12246 guint saved_offset = 0;
12249 proto_tree *subtree;
12250 proto_item *item = NULL;
12252 gchar *type_str = NULL;
12257 #define TCAP_PROB_CODE_TAG 0xd5
12258 if (check_ansi_map_tag(asn1, TCAP_PROB_CODE_TAG))
12260 str = "Problem Code Identifier";
12268 saved_offset = asn1->offset;
12269 asn1_id_decode1(asn1, &tag);
12272 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
12273 saved_offset, -1, "Problem Code");
12275 subtree = proto_item_add_subtree(item, ett_problem);
12277 proto_tree_add_uint_format(subtree, hf_ansi_map_tag, asn1->tvb,
12278 saved_offset, asn1->offset - saved_offset, tag, str);
12280 dissect_ansi_map_len(asn1, subtree, &def_len, &len);
12281 proto_item_set_len(item, (asn1->offset - saved_offset) + len);
12285 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
12286 asn1->offset, len, "Unknown encoding of Problem Code");
12288 asn1->offset += len;
12292 saved_offset = asn1->offset;
12293 asn1_int32_value_decode(asn1, 1, &type);
12294 asn1_int32_value_decode(asn1, 1, &spec);
12298 case 0: type_str = "Not used"; break;
12301 type_str = "General";
12304 case 1: str = "Unrecognized Component Type"; break;
12305 case 2: str = "Incorrect Component Portion"; break;
12306 case 3: str = "Badly Structured Component Portion"; break;
12314 type_str = "Invoke";
12317 case 1: str = "Duplicate Invoke ID"; break;
12318 case 2: str = "Unrecognized Operation Code"; break;
12319 case 3: str = "Incorrect Parameter"; break;
12320 case 4: str = "Unrecognized Correlation ID"; break;
12328 type_str = "Return Result";
12331 case 1: str = "Unrecognized Correlation ID"; break;
12332 case 2: str = "Unexpected Return Result"; break;
12333 case 3: str = "Incorrect Parameter"; break;
12341 type_str = "Return Error";
12344 case 1: str = "Unrecognized Correlation ID"; break;
12345 case 2: str = "Unexpected Return Error"; break;
12346 case 3: str = "Unrecognized Error"; break;
12347 case 4: str = "Unexpected Error"; break;
12348 case 5: str = "Incorrect Parameter"; break;
12356 type_str = "Transaction Portion";
12359 case 1: str = "Unrecognized Package Type"; break;
12360 case 2: str = "Incorrect Transaction Portion"; break;
12361 case 3: str = "Badly Structured Transaction Portion"; break;
12362 case 4: str = "Unrecognized Transaction ID"; break;
12363 case 5: str = "Permission to Release"; break;
12364 case 6: str = "Resource Unavailable"; break;
12372 type_str = "Undefined";
12376 if (spec == 255) { str = "Reserved"; }
12377 else if (spec == 0) { str = "Not used"; }
12379 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
12380 saved_offset, 1, "Problem Type %s", type_str);
12382 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
12383 saved_offset + 1, 1, "Problem Specifier %s", str);
12387 dissect_ansi_error(ASN1_SCK *asn1, proto_tree *tree)
12389 guint saved_offset = 0;
12393 proto_tree *subtree;
12394 proto_item *item = NULL;
12399 #define TCAP_NAT_ERR_CODE_TAG 0xd3
12400 if (check_ansi_map_tag(asn1, TCAP_NAT_ERR_CODE_TAG))
12402 str = "National TCAP Error Code Identifier";
12404 #define TCAP_PRIV_ERR_CODE_TAG 0xd4
12405 else if (check_ansi_map_tag(asn1, TCAP_PRIV_ERR_CODE_TAG))
12407 str = "Private TCAP Error Code Identifier";
12415 saved_offset = asn1->offset;
12416 asn1_id_decode1(asn1, &tag);
12419 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
12420 saved_offset, -1, "TCAP Error Code");
12422 subtree = proto_item_add_subtree(item, ett_error);
12424 proto_tree_add_uint_format(subtree, hf_ansi_map_tag, asn1->tvb,
12425 saved_offset, asn1->offset - saved_offset, tag, str);
12427 dissect_ansi_map_len(asn1, subtree, &def_len, &len);
12428 proto_item_set_len(item, (asn1->offset - saved_offset) + len);
12430 if ((tag == TCAP_PRIV_ERR_CODE_TAG) &&
12433 saved_offset = asn1->offset;
12434 asn1_int32_value_decode(asn1, 1, &value);
12438 case 0x81: str = "Unrecognized MIN"; break;
12439 case 0x82: str = "Unrecognized ESN"; break;
12440 case 0x83: str = "MIN/HLR Mismatch"; break;
12441 case 0x84: str = "Operation Sequence Problem"; break;
12442 case 0x85: str = "Resource Shortage"; break;
12443 case 0x86: str = "Operation Not Supported"; break;
12444 case 0x87: str = "Trunk Unavailable"; break;
12445 case 0x88: str = "Parameter Error"; break;
12446 case 0x89: str = "System Failure"; break;
12447 case 0x8a: str = "Unrecognized Parameter Value"; break;
12448 case 0x8b: str = "Feature Inactive"; break;
12449 case 0x8c: str = "Missing Parameter"; break;
12451 if ((value >= 0xe0) && (value <= 0xff)) { str = "Reserved for protocol extension"; }
12452 else { str = "Reserved"; }
12456 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
12457 saved_offset, 1, str);
12461 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
12462 asn1->offset, len, "Error Code");
12464 asn1->offset += len;
12470 dissect_ansi_param(ASN1_SCK *asn1, proto_tree *tree)
12472 void (*param_fcn)(ASN1_SCK *asn1, proto_tree *tree, guint len) = NULL;
12473 guint saved_offset = 0;
12475 proto_tree *subtree;
12479 gint ett_param_idx, idx;
12483 saved_offset = asn1->offset;
12485 asn1_uint32_value_decode(asn1, 1, &val);
12486 str = my_match_strval((guint32) val, ansi_param_1_strings, &idx);
12490 asn1->offset = saved_offset;
12491 asn1_uint32_value_decode(asn1, 2, &val);
12493 str = my_match_strval((guint32) val, ansi_param_2_strings, &idx);
12497 asn1->offset = saved_offset;
12498 asn1_int32_value_decode(asn1, 3, &val);
12500 str = my_match_strval((guint32) val, ansi_param_3_strings, &idx);
12504 if (((val >= 0x9FFF00) && (val <= 0x9FFF7F)) ||
12505 ((val >= 0xBFFF00) && (val <= 0xBFFF7F)))
12507 str = "Reserved for protocol extension";
12509 else if (((val >= 0x9FFE76) && (val <= 0x9FFE7F)) ||
12510 ((val >= 0xBFFE76) && (val <= 0xBFFE7F)))
12512 str = "Reserved for National Network Use";
12516 str = "Unknown Parameter Data";
12520 ett_param_idx = ett_param;
12524 ett_param_idx = ett_ansi_param_3[idx];
12525 param_fcn = param_3_fcn[idx];
12530 ett_param_idx = ett_ansi_param_2[idx];
12531 param_fcn = param_2_fcn[idx];
12536 ett_param_idx = ett_ansi_param_1[idx];
12537 param_fcn = param_1_fcn[idx];
12541 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
12542 saved_offset, -1, str);
12544 subtree = proto_item_add_subtree(item, ett_param_idx);
12546 proto_tree_add_none_format(subtree, hf_ansi_map_param_id, asn1->tvb,
12547 saved_offset, asn1->offset - saved_offset, "Parameter ID");
12549 dissect_ansi_map_len(asn1, subtree, &def_len, &len);
12551 proto_item_set_len(item, asn1->offset - saved_offset + len);
12555 if (param_fcn == NULL)
12557 proto_tree_add_none_format(subtree, hf_ansi_map_none, asn1->tvb,
12558 asn1->offset, len, "Parameter Data");
12559 asn1->offset += len;
12563 (*param_fcn)(asn1, subtree, len);
12572 dissect_ansi_params(ASN1_SCK *asn1, proto_tree *tree)
12574 guint saved_offset = 0;
12577 proto_tree *subtree;
12578 proto_item *item = NULL;
12582 #define TCAP_PARAM_SET_TAG 0xf2
12583 if (check_ansi_map_tag(asn1, TCAP_PARAM_SET_TAG))
12585 str = "Parameter Set Identifier";
12587 #define TCAP_PARAM_SEQ_TAG 0x30
12588 else if (check_ansi_map_tag(asn1, TCAP_PARAM_SEQ_TAG))
12590 str = "Parameter Sequence Identifier";
12598 saved_offset = asn1->offset;
12599 asn1_id_decode1(asn1, &tag);
12602 proto_tree_add_none_format(tree, hf_ansi_map_none, asn1->tvb,
12603 saved_offset, -1, "Parameters");
12605 subtree = proto_item_add_subtree(item, ett_params);
12607 proto_tree_add_uint_format(subtree, hf_ansi_map_tag, asn1->tvb,
12608 saved_offset, asn1->offset - saved_offset, tag, str);
12610 dissect_ansi_map_len(asn1, subtree, &def_len, &len);
12611 proto_item_set_len(item, (asn1->offset - saved_offset) + len);
12613 param_list(asn1, subtree, len);
12617 dissect_ansi_map_reject(ASN1_SCK *asn1, proto_tree *tree)
12620 proto_tree *subtree;
12622 #define COMPONENT_ID_TAG 0xcf
12623 if (check_ansi_map_tag(asn1, COMPONENT_ID_TAG))
12625 subtree = dissect_ansi_map_component(asn1, tree, &len);
12630 dissect_ansi_map_octet(asn1, subtree, "Correlation ID:");
12635 dissect_ansi_problem(asn1, tree);
12637 dissect_ansi_params(asn1, tree);
12641 dissect_ansi_map_re(ASN1_SCK *asn1, proto_tree *tree)
12644 proto_tree *subtree;
12646 #define COMPONENT_ID_TAG 0xcf
12647 if (check_ansi_map_tag(asn1, COMPONENT_ID_TAG))
12649 subtree = dissect_ansi_map_component(asn1, tree, &len);
12654 dissect_ansi_map_octet(asn1, subtree, "Correlation ID:");
12659 dissect_ansi_error(asn1, tree);
12661 dissect_ansi_params(asn1, tree);
12665 dissect_ansi_map_rr(ASN1_SCK *asn1, proto_tree *tree)
12668 proto_tree *subtree;
12670 #define COMPONENT_ID_TAG 0xcf
12671 if (check_ansi_map_tag(asn1, COMPONENT_ID_TAG))
12673 subtree = dissect_ansi_map_component(asn1, tree, &len);
12678 dissect_ansi_map_octet(asn1, subtree, "Correlation ID:");
12683 dissect_ansi_params(asn1, tree);
12687 dissect_ansi_map_invoke(ASN1_SCK *asn1, packet_info *pinfo, proto_tree *tree)
12690 proto_tree *subtree;
12692 #define COMPONENT_ID_TAG 0xcf
12693 if (check_ansi_map_tag(asn1, COMPONENT_ID_TAG))
12695 subtree = dissect_ansi_map_component(asn1, tree, &len);
12700 dissect_ansi_map_octet(asn1, subtree, "Invoke ID:");
12704 dissect_ansi_map_octet(asn1, subtree, "Invoke ID:");
12705 dissect_ansi_map_octet(asn1, subtree, "Correlation ID:");
12710 ansi_map_is_invoke = TRUE;
12712 dissect_ansi_opr_code(asn1, pinfo, tree);
12714 dissect_ansi_params(asn1, tree);
12718 dissect_ansi_map_message(ASN1_SCK *asn1, packet_info *pinfo, proto_tree *ansi_map_tree)
12720 guint saved_offset;
12724 proto_item *item, *tag_item;
12725 proto_tree *subtree, *tag_subtree;
12730 saved_offset = asn1->offset;
12731 asn1_id_decode1(asn1, &tag);
12733 str = match_strval(tag, ansi_cmp_type_strings);
12735 if (NULL == str) return;
12737 if (check_col(pinfo->cinfo, COL_INFO))
12741 col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", str);
12745 col_append_fstr(pinfo->cinfo, COL_INFO, "& %s ", str);
12750 proto_tree_add_none_format(ansi_map_tree, hf_ansi_map_none, asn1->tvb,
12751 saved_offset, -1, "Components");
12752 subtree = proto_item_add_subtree(item, ett_components);
12755 proto_tree_add_uint_format(subtree, hf_ansi_map_tag, asn1->tvb,
12756 saved_offset, asn1->offset - saved_offset, tag, str);
12758 dissect_ansi_map_len(asn1, subtree, &def_len, &len);
12760 tag_subtree = proto_item_add_subtree(tag_item, ett_components);
12764 case ANSI_TC_INVOKE_L:
12765 dissect_ansi_map_invoke(asn1, pinfo, tag_subtree);
12769 dissect_ansi_map_rr(asn1, tag_subtree);
12773 dissect_ansi_map_re(asn1, tag_subtree);
12776 case ANSI_TC_REJECT:
12777 dissect_ansi_map_reject(asn1, tag_subtree);
12780 case ANSI_TC_INVOKE_N:
12781 dissect_ansi_map_invoke(asn1, pinfo, tag_subtree);
12785 dissect_ansi_map_rr(asn1, tag_subtree);
12792 proto_item_set_len(item, asn1->offset - saved_offset);
12796 dissect_ansi_map(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
12798 proto_item *ansi_map_item;
12799 proto_tree *ansi_map_tree = NULL;
12803 if (!proto_is_protocol_enabled(proto_ansi_map))
12805 call_dissector(data_handle, tvb, pinfo, tree);
12812 * Make entry in the Protocol column on summary display
12814 if (check_col(pinfo->cinfo, COL_PROTOCOL))
12816 col_set_str(pinfo->cinfo, COL_PROTOCOL, "ANSI MAP");
12819 /* In the interest of speed, if "tree" is NULL, don't do any work not
12820 * necessary to generate protocol tree items.
12827 * create the ansi_map protocol tree
12830 proto_tree_add_item(tree, proto_ansi_map, tvb, 0, -1, FALSE);
12833 proto_item_add_subtree(ansi_map_item, ett_ansi_map);
12835 asn1_open(&asn1, tvb, offset);
12837 ansi_map_is_invoke = FALSE;
12839 dissect_ansi_map_message(&asn1, pinfo, ansi_map_tree);
12841 asn1_close(&asn1, &offset);
12846 /* Register the protocol with Ethereal */
12848 proto_register_ansi_map(void)
12852 /* Setup list of header fields */
12853 static hf_register_info hf[] =
12855 { &hf_ansi_map_tag,
12856 { "Tag", "ansi_map.tag",
12857 FT_UINT8, BASE_HEX, NULL, 0,
12860 { &hf_ansi_map_length,
12861 { "Length", "ansi_map.len",
12862 FT_UINT8, BASE_DEC, NULL, 0,
12866 { "Value", "ansi_map.id",
12867 FT_UINT8, BASE_DEC, NULL, 0,
12870 { &hf_ansi_map_none,
12871 { "Sub tree", "ansi_map.none",
12875 { &hf_ansi_map_opr_code,
12876 { "Operation Code", "ansi_map.oprcode",
12877 FT_INT32, BASE_DEC, VALS(ansi_opr_code_strings), 0,
12880 { &hf_ansi_map_param_id,
12881 { "Param ID", "ansi_map.param_id",
12887 /* Setup protocol subtree array */
12888 #define NUM_INDIVIDUAL_PARAMS 15
12889 static gint *ett[NUM_INDIVIDUAL_PARAMS+NUM_PARAM_1+NUM_PARAM_2+NUM_PARAM_3];
12891 memset((void *) ett, 0, sizeof(ett));
12893 ett[0] = &ett_ansi_map;
12894 ett[1] = &ett_opr_code;
12895 ett[2] = &ett_component;
12896 ett[3] = &ett_components;
12897 ett[4] = &ett_param;
12898 ett[5] = &ett_params;
12899 ett[6] = &ett_error;
12900 ett[7] = &ett_problem;
12901 ett[8] = &ett_natnum;
12902 ett[9] = &ett_call_mode;
12903 ett[10] = &ett_chan_data;
12904 ett[11] = &ett_code_chan;
12905 ett[12] = &ett_clr_dig_mask;
12906 ett[13] = &ett_ent_dig_mask;
12907 ett[14] = &ett_all_dig_mask;
12909 for (i=0; i < NUM_PARAM_1; i++)
12911 ett_ansi_param_1[i] = -1;
12912 ett[NUM_INDIVIDUAL_PARAMS+i] = &ett_ansi_param_1[i];
12915 for (i=0; i < NUM_PARAM_2; i++)
12917 ett_ansi_param_2[i] = -1;
12918 ett[NUM_INDIVIDUAL_PARAMS+NUM_PARAM_1+i] = &ett_ansi_param_2[i];
12921 for (i=0; i < NUM_PARAM_3; i++)
12923 ett_ansi_param_3[i] = -1;
12924 ett[NUM_INDIVIDUAL_PARAMS+NUM_PARAM_1+NUM_PARAM_2+i] = &ett_ansi_param_3[i];
12927 /* Register the protocol name and description */
12929 proto_register_protocol("ANSI Mobile Application Part",
12930 "ANSI MAP", "ansi_map");
12932 is637_tele_id_dissector_table =
12933 register_dissector_table("ansi_map.tele_id", "IS-637 Teleservice ID",
12934 FT_UINT8, BASE_DEC);
12936 is683_dissector_table =
12937 register_dissector_table("ansi_map.ota", "IS-683-A (OTA)",
12938 FT_UINT8, BASE_DEC);
12940 /* Required function calls to register the header fields and subtrees used */
12941 proto_register_field_array(proto_ansi_map, hf, array_length(hf));
12942 proto_register_subtree_array(ett, array_length(ett));
12947 proto_reg_handoff_ansi_map(void)
12949 dissector_handle_t ansi_map_handle;
12951 ansi_map_handle = create_dissector_handle(dissect_ansi_map, proto_ansi_map);
12953 dissector_add("tcap.ansi_ssn", 5, ansi_map_handle);
12954 dissector_add("tcap.ansi_ssn", 6, ansi_map_handle);
12955 dissector_add("tcap.ansi_ssn", 7, ansi_map_handle);
12956 dissector_add("tcap.ansi_ssn", 8, ansi_map_handle);
12957 dissector_add("tcap.ansi_ssn", 9 , ansi_map_handle);
12958 dissector_add("tcap.ansi_ssn", 10 , ansi_map_handle);
12959 dissector_add("tcap.ansi_ssn", 11 , ansi_map_handle);
12960 dissector_add("tcap.ansi_ssn", 12 , ansi_map_handle);
12962 data_handle = find_dissector("data");