new Q.932 and QSIG dissectors
[obnox/wireshark/wip.git] / epan / dissectors / packet-qsig.c
1 /* Do not modify this file.                                                   */
2 /* It is created automatically by the ASN.1 to Wireshark dissector compiler   */
3 /* .\packet-qsig.c                                                            */
4 /* ../../tools/asn2wrs.py -b -T -e -p qsig -c qsig.cnf -s packet-qsig-template qsig-gf-ext.asn qsig-gf-gp.asn qsig-gf-ade.asn qsig-na.asn qsig-cf.asn */
5
6 /* Input file: packet-qsig-template.c */
7
8 #line 1 "packet-qsig-template.c"
9 /* packet-qsig.c
10  * Routines for QSIG packet dissection
11  * 2007  Tomas Kukosa
12  *
13  * $Id$
14  *
15  * Wireshark - Network traffic analyzer
16  * By Gerald Combs <gerald@wireshark.org>
17  * Copyright 1998 Gerald Combs
18  *
19  * This program is free software; you can redistribute it and/or
20  * modify it under the terms of the GNU General Public License
21  * as published by the Free Software Foundation; either version 2
22  * of the License, or (at your option) any later version.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with this program; if not, write to the Free Software
31  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
32  */
33
34 #ifdef HAVE_CONFIG_H
35 # include "config.h"
36 #endif
37
38 #include <epan/packet.h>
39 #include <epan/prefs.h>
40 #include <epan/strutil.h>
41 #include <epan/emem.h>
42
43 #include "packet-ber.h"
44 #include "packet-qsig.h"
45
46 #define PNAME  "QSIG"
47 #define PSNAME "QSIG"
48 #define PFNAME "qsig"
49
50 /* Shifted codeset values */
51 #define CS0 0x000
52 #define CS1 0x100
53 #define CS2 0x200
54 #define CS3 0x300
55 #define CS4 0x400
56 #define CS5 0x500
57 #define CS6 0x600
58 #define CS7 0x700
59
60 #define QSIG_IE_TRANSIT_COUNTER 0x31
61 #define QSIG_IE_PARTY_CATEGORY  0x32
62
63 static const value_string qsig_str_ie_type_cs4[] = {
64   { QSIG_IE_TRANSIT_COUNTER , "Transit counter" },
65   { 0, NULL}
66 };
67 static const value_string qsig_str_ie_type_cs5[] = {
68   { QSIG_IE_PARTY_CATEGORY  , "Party category" },
69   { 0, NULL}
70 };
71 /* Codeset array */
72 static const value_string *qsig_str_ie_type[] = {
73   NULL,
74   NULL,
75   NULL,
76   NULL,
77   qsig_str_ie_type_cs4,
78   qsig_str_ie_type_cs5,
79   NULL,
80   NULL,
81 };
82
83
84 static const value_string qsig_str_pc[] = {
85   { 0x00 , "unknown" },
86   { 0x01 , "extension" },
87   { 0x02 , "operator" },
88   { 0x03 , "emergency extension" },
89   { 0, NULL}
90 };
91
92 const value_string qsig_str_service[] = {
93   { 13868, "QSIG-NA" },
94   { 13873, "QSIG-CF" },
95   { 13874, "QSIG-PR" },
96   { 13869, "QSIG-CT" },
97   { 13870, "QSIG-CC" },
98   { 14843, "QSIG-CO" },
99   { 14844, "QSIG-DND(O)" },
100   { 14846, "QSIG-CI" },
101   { 15050, "QSIG-AOC" },
102   { 15052, "QSIG-RE" },
103   { 15054, "QSIG-CINT" },
104   { 15506, "QSIG-MWI" },
105   { 15507, "SYNC-SIG" },
106   { 15772, "QSIG-CMN" },
107   { 15992, "QSIG-CPI(P)" },
108   { 17876, "QSIG-PUMR" },
109   { 17878, "QSIG-PUMCH" },
110   { 19460, "QSIG-SSCT" },
111   { 15429, "QSIG-WTMLR" },
112   { 15431, "QSIG-WTMCH" },
113   { 15433, "QSIG-WTMAU" },
114   { 21407, "QSIG-SD" },
115   { 21889, "QSIG-CIDL" },
116   {   325, "QSIG-SMS" },
117   {   344, "QSIG-MCR" },
118   {  3471, "QSIG-MCM" },
119   {  3472, "QSIG-MID" },
120   {   0, NULL}
121 };
122
123 const value_string qsig_str_service_name[] = {
124   { 13868, "Name-Operations" },
125   { 13873, "Call-Diversion-Operations" },
126   { 13874, "Path-Replacement-Operations" },
127   { 13869, "Call-Transfer-Operations" },
128   { 13870, "SS-CC-Operations" },
129   { 14843, "Call-Offer-Operations" },
130   { 14844, "Do-Not-Disturb-Operations" },
131   { 14846, "Call-Intrusion-Operations" },
132   { 15050, "SS-AOC-Operation" },
133   { 15052, "Recall-Operation" },
134   { 15054, "Call-Interception-Operations" },
135   { 15506, "SS-MWI-Operations" },
136   { 15507, "Synchronization-Operations" },
137   { 15772, "Common-Information-Operations" },
138   { 15992, "Call-Interruption-Operation" },
139   { 17876, "PUM-Registration-Operation" },
140   { 17878, "Private-User-Mobility-Call-Handling-Operations" },
141   { 19460, "Single-Step-Call-Transfer-Operations" },
142   { 15429, "WTM-Location-Registration-Operations" },
143   { 15431, "Wireless-Terminal-Call-Handling-Operations" },
144   { 15433, "WTM-Authentication-Operations" },
145   { 21407, "SS-SD-Operations" },
146   { 21889, "Call-Identification-and-Call-Linkage-Operations" },
147   {   325, "Short-Message-Service-Operations" },
148   {   344, "SS-MCR-Operations" },
149   {  3471, "SS-MCM-Operations" },
150   {  3472, "SS-MID-Operations" },
151   {   0, NULL}
152 };
153
154 const value_string qsig_str_operation[] = {
155   {   0, "callingName" },
156   {   1, "calledName" },
157   {   2, "connectedName" },
158   {   3, "busyName" },
159   {   4, "pathReplacePropose" },
160   {   5, "pathReplaceSetup" },
161   {   6, "pathReplaceRetain" },
162   {   7, "callTransferIdentify" },
163   {   8, "callTransferAbandon" },
164   {   9, "callTransferInitiate" },
165   {  10, "callTransferSetup" },
166   {  11, "callTransferActive" },
167   {  12, "callTransferComplete" },
168   {  13, "callTransferUpdate" },
169   {  14, "subaddressTransfer" },
170   {  15, "activateDiversionQ" },
171   {  16, "deactivateDiversionQ" },
172   {  17, "interrogateDiversionQ" },
173   {  18, "checkRestriction" },
174   {  19, "callRerouteing" },
175   {  20, "divertingLegInformation1" },
176   {  21, "divertingLegInformation2" },
177   {  22, "divertingLegInformation3" },
178   {  23, "cfnrDivertedLegFailed" },
179 /*   24 Reserved (corresponding integer value used by ISO for MLPP) */   
180 /*   25 Reserved (corresponding integer value used by ISO for MLPP) */   
181 /*   26 Reserved (corresponding integer value used by ISO for MLPP) */   
182   {  27, "ccnrRequest" },
183   {  28, "ccCancel" },
184   {  29, "ccExecPossible" },
185   {  30, "ccPathReserve" },
186   {  31, "ccRingout" },
187   {  32, "ccSuspend" },
188   {  33, "ccResume" },
189   {  34, "callOfferRequest" },
190   {  35, "doNotDisturbActivateQ" },
191   {  36, "doNotDisturbDeactivateQ" },
192   {  37, "doNotDisturbInterrogateQ" },
193   {  38, "doNotDisturbOverrideQ" },
194   {  39, "doNotDisturbOvrExecuteQ" },
195   {  40, "ccbsRequest" },
196   {  41, "pathRetain" },        /* common for QSIG-CO, QSIG-DND(O), QSIG-CI */
197   {  42, "serviceAvailable" },  /* common for QSIG-CO, QSIG-DND(O), QSIG-CI */
198   {  43, "callIntrusionRequest" },
199   {  44, "callIntrusionGetCIPL" },
200   {  45, "callIntrusionIsolate" },
201   {  46, "callIntrusionForcedRelease" },
202   {  47, "callIntrusionWOBRequest" },
203   {  48, "callIntrusionCompleted" },
204   {  49, "cfbOverride" },       /* common for QSIG-CO, QSIG-CI */
205   {  50, "locUpdate" },
206   {  51, "locDelete" },
207   {  52, "locDeReg" },
208   {  53, "pisnEnquiry" },
209   {  54, "wtmiEnquiry" },
210   {  55, "wtmiDivert" },
211   {  56, "wtmiInform" },
212   {  57, "recallAlerting" },
213   {  58, "recallAnswered" },
214   {  59, "chargeRequest" },
215   {  60, "getFinalCharge" },
216   {  61, "aocFinal" },
217   {  62, "aocInterim" },
218   {  63, "aocRate" },
219   {  64, "aocComplete" },
220   {  65, "aocDivChargeReq" },
221   {  66, "cintLegInformation1" },
222   {  67, "cintLegInformation2" },
223   {  68, "cintCondition" },
224   {  69, "cintDisable" },
225   {  70, "cintEnable" },
226   {  71, "wtmoCall" },
227   {  72, "authWtmUser" },
228   {  73, "getWtatParam" },
229   {  74, "wtatParamEnq" },
230   {  75, "getWtanParam" },
231   {  76, "wtanParamEnq" },
232   {  77, "transferAuthParam" },
233   {  78, "synchronizationRequest" },
234   {  79, "synchronizationInfo" },
235   {  80, "mwiActivate/mCMNewMsg" },        /* common for QSIG-MWI, QSIG-MCM */
236   {  81, "mwiDeactivate/mCMNoNewMsg" },    /* common for QSIG-MWI, QSIG-MCM */
237   {  82, "mwiInterrogate/mCMUpdateReq" },  /* common for QSIG-MWI, QSIG-MCM */
238 /*   83 Reserved (corresponding integer value used by ISO for RRC)      ISO/IEC 13241 */
239   {  84, "cmnRequest" },
240   {  85, "cmnInform" },
241   {  86, "pathReplaceInvite" },
242   {  87, "callInterruptionRequest" },
243   {  88, "callProtectionRequest" },
244   {  89, "pumRegistr" },
245   {  90, "pumDelReg" },
246   {  91, "pumDe-reg" },
247   {  92, "pumInterrog" },
248   {  93, "pumiEnquiry" },
249   {  94, "pumiDivert" },
250   {  95, "pumiInform" },
251   {  96, "pumoCall" },
252   {  97, "getRRCInf" },
253   {  98, "locInfoCheck" },
254   {  99, "ssctInitiate" },
255   { 100, "ssctSetup" },
256   { 101, "ssctPostDial" },
257   { 102, "ssctDigitInfo" },
258   { 103, "display" },
259   { 104, "keypad" },
260   { 105, "callIdentificationAssign" },
261   { 106, "callIdentificationUpdate" },
262   { 107, "smsSubmit" },
263   { 108, "smsDeliver" },
264   { 109, "smsStatusReport" },
265   { 110, "smsCommand" },
266   { 111, "scAlert" },
267   { 112, "mCRequest" },
268   { 113, "mCAlerting" },
269   { 114, "mCInform" },
270   { 115, "mCMUpdate" },
271   { 116, "mCMService" },
272   { 117, "mCMInterrogate" },
273   { 118, "mCMailboxFull" },
274   { 119, "mIDMailboxAuth" },
275   { 120, "mIDMailboxID" },
276   {   0, NULL}
277 };
278
279
280 void dissect_qsig_arg(tvbuff_t*, packet_info*, proto_tree*, guint32);
281 #define FNABODY(x) static void dissect_qsig_arg##x(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) \
282   { dissect_qsig_arg(tvb, pinfo, tree, (x)); }
283
284 void dissect_qsig_res(tvbuff_t*, packet_info*, proto_tree*, guint32);
285 #define FNRBODY(x) static void dissect_qsig_res##x(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) \
286   { dissect_qsig_res(tvb, pinfo, tree, (x)); }
287
288 /* QSIG-NA */
289 FNABODY(0)  FNRBODY(0)
290 FNABODY(1)  FNRBODY(1)
291 FNABODY(2)  FNRBODY(2)
292 FNABODY(3)  FNRBODY(3)
293 /* QSIG-CF */
294 FNABODY(15)  FNRBODY(15)
295 FNABODY(16)  FNRBODY(16)
296 FNABODY(17)  FNRBODY(17)
297 FNABODY(18)  FNRBODY(18)
298 FNABODY(19)  FNRBODY(19)
299 FNABODY(20)  FNRBODY(20)
300 FNABODY(21)  FNRBODY(21)
301 FNABODY(22)  FNRBODY(22)
302 FNABODY(23)  FNRBODY(23)
303 /* QSIG-PR */
304 FNABODY(4)   FNRBODY(4)
305 FNABODY(5)   FNRBODY(5)
306 FNABODY(6)   FNRBODY(6)
307 FNABODY(86)  FNRBODY(86)
308 /* QSIG-CT */
309 FNABODY(7)   FNRBODY(7)
310 FNABODY(8)   FNRBODY(8)
311 FNABODY(9)   FNRBODY(9)
312 FNABODY(10)  FNRBODY(10)
313 FNABODY(11)  FNRBODY(11)
314 FNABODY(12)  FNRBODY(12)
315 FNABODY(13)  FNRBODY(13)
316 FNABODY(14)  FNRBODY(14)
317 /* QSIG-CC */
318 FNABODY(40)  FNRBODY(40)
319 FNABODY(27)  FNRBODY(27)
320 FNABODY(28)  FNRBODY(28)
321 FNABODY(29)  FNRBODY(29)
322 FNABODY(30)  FNRBODY(30)
323 FNABODY(31)  FNRBODY(31)
324 FNABODY(32)  FNRBODY(32)
325 FNABODY(33)  FNRBODY(33)
326 /* QSIG-CO */
327 FNABODY(34)  FNRBODY(34)
328 /* see common for QSIG-CO, QSIG-DND(O), QSIG-CI */                     
329 /* QSIG-DND(O) */
330 FNABODY(35)  FNRBODY(35)
331 FNABODY(36)  FNRBODY(36)
332 FNABODY(37)  FNRBODY(37)
333 FNABODY(38)  FNRBODY(38)
334 FNABODY(39)  FNRBODY(39)
335 /* see common for QSIG-CO, QSIG-DND(O), QSIG-CI */                     
336 /* QSIG-CI */
337 FNABODY(43)  FNRBODY(43)
338 FNABODY(44)  FNRBODY(44)
339 FNABODY(45)  FNRBODY(45)
340 FNABODY(46)  FNRBODY(46)
341 FNABODY(47)  FNRBODY(47)
342 FNABODY(48)  FNRBODY(48)
343 /* QSIG-AOC */
344 FNABODY(59)  FNRBODY(59)
345 FNABODY(60)  FNRBODY(60)
346 FNABODY(61)  FNRBODY(61)
347 FNABODY(62)  FNRBODY(62)
348 FNABODY(63)  FNRBODY(63)
349 FNABODY(64)  FNRBODY(64)
350 FNABODY(65)  FNRBODY(65)
351 /* QSIG-RE */
352 FNABODY(57)  FNRBODY(57)
353 FNABODY(58)  FNRBODY(58)
354 /* QSIG-CINT */
355 FNABODY(66)  FNRBODY(66)
356 FNABODY(67)  FNRBODY(67)
357 FNABODY(68)  FNRBODY(68)
358 FNABODY(69)  FNRBODY(69)
359 FNABODY(70)  FNRBODY(70)
360 /* QSIG-MWI */
361 /* see common for QSIG-MWI, QSIG-MCM */                     
362 /* SYNC-SIG */                     
363 FNABODY(78)  FNRBODY(78)
364 FNABODY(79)  FNRBODY(79)
365 /* QSIG-CMN */
366 FNABODY(84) FNRBODY(84)
367 FNABODY(85) FNRBODY(85)
368 /* QSIG-CPI(P) */
369 FNABODY(87)  FNRBODY(87)
370 FNABODY(88)  FNRBODY(88)
371 /* QSIG-PUMR */
372 FNABODY(89)  FNRBODY(89)
373 FNABODY(90)  FNRBODY(90)
374 FNABODY(91)  FNRBODY(91)
375 FNABODY(92)  FNRBODY(92)
376 /* QSIG-PUMCH */
377 FNABODY(93)  FNRBODY(93)
378 FNABODY(94)  FNRBODY(94)
379 FNABODY(95)  FNRBODY(95)
380 FNABODY(96)  FNRBODY(96)
381 /* QSIG-SSCT */
382 FNABODY(99)  FNRBODY(99)
383 FNABODY(100) FNRBODY(100)
384 FNABODY(101) FNRBODY(101)
385 FNABODY(102) FNRBODY(102)
386 /* QSIG-WTMLR */
387 FNABODY(50)  FNRBODY(50)
388 FNABODY(51)  FNRBODY(51)
389 FNABODY(52)  FNRBODY(52)
390 FNABODY(53)  FNRBODY(53)
391 FNABODY(97)  FNRBODY(97)
392 FNABODY(98)  FNRBODY(98)
393 /* QSIG-WTMCH */                      
394 FNABODY(54)  FNRBODY(54)
395 FNABODY(55)  FNRBODY(55)
396 FNABODY(56)  FNRBODY(56)
397 FNABODY(71)  FNRBODY(71)
398 /* QSIG-WTMAU */               
399 FNABODY(72)  FNRBODY(72)
400 FNABODY(73)  FNRBODY(73)
401 FNABODY(74)  FNRBODY(74)
402 FNABODY(75)  FNRBODY(75)
403 FNABODY(76)  FNRBODY(76)
404 FNABODY(77)  FNRBODY(77)
405 /* QSIG-SD */                     
406 FNABODY(103) FNRBODY(103)
407 FNABODY(104) FNRBODY(104)
408 /* QSIG-CIDL */
409 FNABODY(105) FNRBODY(105)
410 FNABODY(106) FNRBODY(106)
411 /* QSIG-SMS */
412 FNABODY(107) FNRBODY(107)
413 FNABODY(108) FNRBODY(108)
414 FNABODY(109) FNRBODY(109)
415 FNABODY(110) FNRBODY(110)
416 FNABODY(111) FNRBODY(111)
417 /* QSIG-MCR */
418 FNABODY(112)  FNRBODY(112)
419 FNABODY(113)  FNRBODY(113)
420 FNABODY(114)  FNRBODY(114)
421 /* QSIG-MCM */                      
422 FNABODY(115) FNRBODY(115)
423 FNABODY(116) FNRBODY(116)
424 FNABODY(117) FNRBODY(117)
425 FNABODY(118) FNRBODY(118)
426 /* QSIG-MID */                      
427 FNABODY(119) FNRBODY(119)
428 FNABODY(120) FNRBODY(120)
429 /* common for QSIG-CO, QSIG-DND(O), QSIG-CI */                     
430 FNABODY(41)  FNRBODY(41)
431 FNABODY(42)  FNRBODY(42)
432 FNABODY(49)  FNRBODY(49)
433 /* common for QSIG-MWI, QSIG-MCM */                     
434 FNABODY(80)  FNRBODY(80)
435 FNABODY(81)  FNRBODY(81)
436 FNABODY(82)  FNRBODY(82)
437                      
438
439 typedef guint32 (*pdu_fn)(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset);
440
441 typedef struct _qsig_op {
442   guint32 service;
443   dissector_t arg_dissector;
444   dissector_t res_dissector;
445   dissector_t arg_pdu;
446   dissector_t res_pdu;
447 } qsig_op;
448 #define FNA(x) dissect_qsig_arg##x
449 #define FNR(x) dissect_qsig_res##x
450
451 /* Initialize the protocol and registered fields */
452 int proto_qsig = -1;
453 static int hf_qsig_operation = -1;
454 static int hf_qsig_service = -1;
455 static int hf_qsig_ie_type = -1;
456 static int hf_qsig_ie_type_cs4 = -1;
457 static int hf_qsig_ie_type_cs5 = -1;
458 static int hf_qsig_ie_len = -1;
459 static int hf_qsig_ie_data = -1;
460 static int hf_qsig_tc = -1;
461 static int hf_qsig_pc = -1;
462
463 /*--- Included file: packet-qsig-hf.c ---*/
464 #line 1 "packet-qsig-hf.c"
465 static int hf_qsig_NameArg_PDU = -1;              /* NameArg */
466 static int hf_qsig_ActivateDivArg_PDU = -1;       /* ActivateDivArg */
467 static int hf_qsig_ActivateDivRes_PDU = -1;       /* ActivateDivRes */
468 static int hf_qsig_DeactivateDivArg_PDU = -1;     /* DeactivateDivArg */
469 static int hf_qsig_DeactivateDivRes_PDU = -1;     /* DeactivateDivRes */
470 static int hf_qsig_InterrDivArg_PDU = -1;         /* InterrDivArg */
471 static int hf_qsig_ChkResArg_PDU = -1;            /* ChkResArg */
472 static int hf_qsig_ChkResRes_PDU = -1;            /* ChkResRes */
473 static int hf_qsig_CallRrArg_PDU = -1;            /* CallRrArg */
474 static int hf_qsig_CallRrRes_PDU = -1;            /* CallRrRes */
475 static int hf_qsig_DivLegInf1Arg_PDU = -1;        /* DivLegInf1Arg */
476 static int hf_qsig_DivLegInf2Arg_PDU = -1;        /* DivLegInf2Arg */
477 static int hf_qsig_DivLegInf3Arg_PDU = -1;        /* DivLegInf3Arg */
478 static int hf_qsig_DivLegFailArg_PDU = -1;        /* DivLegFailArg */
479 static int hf_qsig_IntResultList_PDU = -1;        /* IntResultList */
480 static int hf_qsig_extensionId = -1;              /* OBJECT_IDENTIFIER */
481 static int hf_qsig_extensionArgument = -1;        /* T_extensionArgument */
482 static int hf_qsig_presentationAllowedAddressS = -1;  /* AddressScreened */
483 static int hf_qsig_presentationRestricted = -1;   /* NULL */
484 static int hf_qsig_numberNotAvailableDueToInterworking = -1;  /* NULL */
485 static int hf_qsig_presentationRestrictedAddressS = -1;  /* AddressScreened */
486 static int hf_qsig_presentationAllowedAddressU = -1;  /* Address */
487 static int hf_qsig_presentationRestrictedAddressU = -1;  /* Address */
488 static int hf_qsig_presentationAllowedAddressNS = -1;  /* NumberScreened */
489 static int hf_qsig_presentationRestrictedAddressNS = -1;  /* NumberScreened */
490 static int hf_qsig_presentationAllowedAddressNU = -1;  /* PartyNumber */
491 static int hf_qsig_presentationRestrictedAddressNU = -1;  /* PartyNumber */
492 static int hf_qsig_partyNumber = -1;              /* PartyNumber */
493 static int hf_qsig_screeningIndicator = -1;       /* ScreeningIndicator */
494 static int hf_qsig_partySubaddress = -1;          /* PartySubaddress */
495 static int hf_qsig_unknownPartyNumber = -1;       /* NumberDigits */
496 static int hf_qsig_publicPartyNumber = -1;        /* PublicPartyNumber */
497 static int hf_qsig_dataPartyNumber = -1;          /* NumberDigits */
498 static int hf_qsig_telexPartyNumber = -1;         /* NumberDigits */
499 static int hf_qsig_privatePartyNumber = -1;       /* PrivatePartyNumber */
500 static int hf_qsig_nationalStandardPartyNumber = -1;  /* NumberDigits */
501 static int hf_qsig_publicTypeOfNumber = -1;       /* PublicTypeOfNumber */
502 static int hf_qsig_publicNumberDigits = -1;       /* NumberDigits */
503 static int hf_qsig_privateTypeOfNumber = -1;      /* PrivateTypeOfNumber */
504 static int hf_qsig_privateNumberDigits = -1;      /* NumberDigits */
505 static int hf_qsig_userSpecifiedSubaddress = -1;  /* UserSpecifiedSubaddress */
506 static int hf_qsig_nSAPSubaddress = -1;           /* NSAPSubaddress */
507 static int hf_qsig_subaddressInformation = -1;    /* SubaddressInformation */
508 static int hf_qsig_oddCountIndicator = -1;        /* BOOLEAN */
509 static int hf_qsig_name = -1;                     /* Name */
510 static int hf_qsig_nameSequence = -1;             /* T_nameSequence */
511 static int hf_qsig_extensionNA = -1;              /* NameExtension */
512 static int hf_qsig_single = -1;                   /* Extension */
513 static int hf_qsig_multiple = -1;                 /* SEQUENCE_OF_Extension */
514 static int hf_qsig_multiple_item = -1;            /* Extension */
515 static int hf_qsig_namePresentationAllowed = -1;  /* NamePresentationAllowed */
516 static int hf_qsig_namePresentationRestricted = -1;  /* NamePresentationRestricted */
517 static int hf_qsig_nameNotAvailable = -1;         /* NameNotAvailable */
518 static int hf_qsig_namePresentationAllowedSimple = -1;  /* NameData */
519 static int hf_qsig_namePresentationAllowedExtended = -1;  /* NameSet */
520 static int hf_qsig_namePresentationRestrictedSimple = -1;  /* NameData */
521 static int hf_qsig_namePresentationRestrictedExtended = -1;  /* NameSet */
522 static int hf_qsig_namePresentationRestrictedNull = -1;  /* NULL */
523 static int hf_qsig_nameData = -1;                 /* NameData */
524 static int hf_qsig_characterSet = -1;             /* CharacterSet */
525 static int hf_qsig_procedure = -1;                /* Procedure */
526 static int hf_qsig_basicService = -1;             /* BasicService */
527 static int hf_qsig_divertedToAddress = -1;        /* Address */
528 static int hf_qsig_servedUserNr = -1;             /* PartyNumber */
529 static int hf_qsig_activatingUserNr = -1;         /* PartyNumber */
530 static int hf_qsig_extensionAD = -1;              /* ADExtension */
531 static int hf_qsig_null = -1;                     /* NULL */
532 static int hf_qsig_deactivatingUserNr = -1;       /* PartyNumber */
533 static int hf_qsig_extensionDD = -1;              /* DDExtension */
534 static int hf_qsig_interrogatingUserNr = -1;      /* PartyNumber */
535 static int hf_qsig_extensionID = -1;              /* IDExtension */
536 static int hf_qsig_divertedToNr = -1;             /* PartyNumber */
537 static int hf_qsig_extensionCHR = -1;             /* CHRExtension */
538 static int hf_qsig_rerouteingReason = -1;         /* DiversionReason */
539 static int hf_qsig_originalRerouteingReason = -1;  /* DiversionReason */
540 static int hf_qsig_calledAddress = -1;            /* Address */
541 static int hf_qsig_diversionCounter = -1;         /* INTEGER_1_15 */
542 static int hf_qsig_pSS1InfoElement = -1;          /* PSS1InformationElement */
543 static int hf_qsig_lastRerouteingNr = -1;         /* PresentedNumberUnscreened */
544 static int hf_qsig_subscriptionOption = -1;       /* SubscriptionOption */
545 static int hf_qsig_callingPartySubaddress = -1;   /* PartySubaddress */
546 static int hf_qsig_callingNumber = -1;            /* PresentedNumberScreened */
547 static int hf_qsig_callingName = -1;              /* Name */
548 static int hf_qsig_originalCalledNr = -1;         /* PresentedNumberUnscreened */
549 static int hf_qsig_redirectingName = -1;          /* Name */
550 static int hf_qsig_originalCalledName = -1;       /* Name */
551 static int hf_qsig_extensionCRR = -1;             /* CRRExtension */
552 static int hf_qsig_diversionReason = -1;          /* DiversionReason */
553 static int hf_qsig_nominatedNr = -1;              /* PartyNumber */
554 static int hf_qsig_extensionDLI1 = -1;            /* DLI1Extension */
555 static int hf_qsig_originalDiversionReason = -1;  /* DiversionReason */
556 static int hf_qsig_divertingNr = -1;              /* PresentedNumberUnscreened */
557 static int hf_qsig_extensionDLI2 = -1;            /* DLI2Extension */
558 static int hf_qsig_presentationAllowedIndicator = -1;  /* PresentationAllowedIndicator */
559 static int hf_qsig_redirectionName = -1;          /* Name */
560 static int hf_qsig_extensionDLI3 = -1;            /* DLI3Extension */
561 static int hf_qsig_IntResultList_item = -1;       /* IntResult */
562 static int hf_qsig_remoteEnabled = -1;            /* BOOLEAN */
563 static int hf_qsig_extensionIR = -1;              /* IRExtension */
564
565 /*--- End of included file: packet-qsig-hf.c ---*/
566 #line 455 "packet-qsig-template.c"
567
568 static int *hf_qsig_ie_type_arr[] = {
569   NULL,
570   NULL,
571   NULL,
572   NULL,
573   &hf_qsig_ie_type_cs4,
574   &hf_qsig_ie_type_cs5,
575   NULL,
576   NULL,
577 };
578
579 /* Initialize the subtree pointers */
580 static gint ett_qsig = -1;
581 static gint ett_qsig_ie = -1;
582
583 /*--- Included file: packet-qsig-ett.c ---*/
584 #line 1 "packet-qsig-ett.c"
585 static gint ett_qsig_Extension = -1;
586 static gint ett_qsig_PresentedAddressScreened = -1;
587 static gint ett_qsig_PresentedAddressUnscreened = -1;
588 static gint ett_qsig_PresentedNumberScreened = -1;
589 static gint ett_qsig_PresentedNumberUnscreened = -1;
590 static gint ett_qsig_AddressScreened = -1;
591 static gint ett_qsig_NumberScreened = -1;
592 static gint ett_qsig_Address = -1;
593 static gint ett_qsig_PartyNumber = -1;
594 static gint ett_qsig_PublicPartyNumber = -1;
595 static gint ett_qsig_PrivatePartyNumber = -1;
596 static gint ett_qsig_PartySubaddress = -1;
597 static gint ett_qsig_UserSpecifiedSubaddress = -1;
598 static gint ett_qsig_NameArg = -1;
599 static gint ett_qsig_T_nameSequence = -1;
600 static gint ett_qsig_NameExtension = -1;
601 static gint ett_qsig_SEQUENCE_OF_Extension = -1;
602 static gint ett_qsig_Name = -1;
603 static gint ett_qsig_NamePresentationAllowed = -1;
604 static gint ett_qsig_NamePresentationRestricted = -1;
605 static gint ett_qsig_NameSet = -1;
606 static gint ett_qsig_ActivateDivArg = -1;
607 static gint ett_qsig_ADExtension = -1;
608 static gint ett_qsig_ActivateDivRes = -1;
609 static gint ett_qsig_DeactivateDivArg = -1;
610 static gint ett_qsig_DDExtension = -1;
611 static gint ett_qsig_DeactivateDivRes = -1;
612 static gint ett_qsig_InterrDivArg = -1;
613 static gint ett_qsig_IDExtension = -1;
614 static gint ett_qsig_ChkResArg = -1;
615 static gint ett_qsig_CHRExtension = -1;
616 static gint ett_qsig_ChkResRes = -1;
617 static gint ett_qsig_CallRrArg = -1;
618 static gint ett_qsig_CRRExtension = -1;
619 static gint ett_qsig_CallRrRes = -1;
620 static gint ett_qsig_DivLegInf1Arg = -1;
621 static gint ett_qsig_DLI1Extension = -1;
622 static gint ett_qsig_DivLegInf2Arg = -1;
623 static gint ett_qsig_DLI2Extension = -1;
624 static gint ett_qsig_DivLegInf3Arg = -1;
625 static gint ett_qsig_DLI3Extension = -1;
626 static gint ett_qsig_DivLegFailArg = -1;
627 static gint ett_qsig_IntResultList = -1;
628 static gint ett_qsig_IntResult = -1;
629 static gint ett_qsig_IRExtension = -1;
630
631 /*--- End of included file: packet-qsig-ett.c ---*/
632 #line 471 "packet-qsig-template.c"
633
634 /* Preferences */
635
636 /* Subdissectors */
637 static dissector_handle_t data_handle = NULL; 
638
639 /* Gloabl variables */
640
641
642
643 /*--- Included file: packet-qsig-fn.c ---*/
644 #line 1 "packet-qsig-fn.c"
645 /*--- Fields for imported types ---*/
646
647
648
649
650 static int
651 dissect_qsig_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
652   offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL);
653
654   return offset;
655 }
656 static int dissect_extensionId(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
657   return dissect_qsig_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_qsig_extensionId);
658 }
659
660
661
662 static int
663 dissect_qsig_T_extensionArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
664 #line 65 "qsig.cnf"
665
666
667
668   return offset;
669 }
670 static int dissect_extensionArgument(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
671   return dissect_qsig_T_extensionArgument(FALSE, tvb, offset, pinfo, tree, hf_qsig_extensionArgument);
672 }
673
674
675 static const ber_sequence_t Extension_sequence[] = {
676   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_extensionId },
677   { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_extensionArgument },
678   { 0, 0, 0, NULL }
679 };
680
681 static int
682 dissect_qsig_Extension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
683   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
684                                    Extension_sequence, hf_index, ett_qsig_Extension);
685
686   return offset;
687 }
688 static int dissect_single_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
689   return dissect_qsig_Extension(TRUE, tvb, offset, pinfo, tree, hf_qsig_single);
690 }
691 static int dissect_multiple_item(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
692   return dissect_qsig_Extension(FALSE, tvb, offset, pinfo, tree, hf_qsig_multiple_item);
693 }
694
695
696
697 static int
698 dissect_qsig_OCTET_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
699   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
700                                        NULL);
701
702   return offset;
703 }
704
705
706
707 static int
708 dissect_qsig_PSS1InformationElement(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
709   offset = dissect_ber_tagged_type(implicit_tag, pinfo, tree, tvb, offset,
710                                       hf_index, BER_CLASS_APP, 0, TRUE, dissect_qsig_OCTET_STRING);
711
712   return offset;
713 }
714 static int dissect_pSS1InfoElement(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
715   return dissect_qsig_PSS1InformationElement(FALSE, tvb, offset, pinfo, tree, hf_qsig_pSS1InfoElement);
716 }
717
718
719
720 static int
721 dissect_qsig_NumberDigits(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
722   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString,
723                                             pinfo, tree, tvb, offset, hf_index,
724                                             NULL);
725
726   return offset;
727 }
728 static int dissect_unknownPartyNumber_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
729   return dissect_qsig_NumberDigits(TRUE, tvb, offset, pinfo, tree, hf_qsig_unknownPartyNumber);
730 }
731 static int dissect_dataPartyNumber_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
732   return dissect_qsig_NumberDigits(TRUE, tvb, offset, pinfo, tree, hf_qsig_dataPartyNumber);
733 }
734 static int dissect_telexPartyNumber_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
735   return dissect_qsig_NumberDigits(TRUE, tvb, offset, pinfo, tree, hf_qsig_telexPartyNumber);
736 }
737 static int dissect_nationalStandardPartyNumber_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
738   return dissect_qsig_NumberDigits(TRUE, tvb, offset, pinfo, tree, hf_qsig_nationalStandardPartyNumber);
739 }
740 static int dissect_publicNumberDigits(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
741   return dissect_qsig_NumberDigits(FALSE, tvb, offset, pinfo, tree, hf_qsig_publicNumberDigits);
742 }
743 static int dissect_privateNumberDigits(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
744   return dissect_qsig_NumberDigits(FALSE, tvb, offset, pinfo, tree, hf_qsig_privateNumberDigits);
745 }
746
747
748 static const value_string qsig_PublicTypeOfNumber_vals[] = {
749   {   0, "unknown" },
750   {   1, "internationalNumber" },
751   {   2, "nationalNumber" },
752   {   3, "networkSpecificNumber" },
753   {   4, "subscriberNumber" },
754   {   6, "abbreviatedNumber" },
755   { 0, NULL }
756 };
757
758
759 static int
760 dissect_qsig_PublicTypeOfNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
761   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
762                                   NULL);
763
764   return offset;
765 }
766 static int dissect_publicTypeOfNumber(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
767   return dissect_qsig_PublicTypeOfNumber(FALSE, tvb, offset, pinfo, tree, hf_qsig_publicTypeOfNumber);
768 }
769
770
771 static const ber_sequence_t PublicPartyNumber_sequence[] = {
772   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_publicTypeOfNumber },
773   { BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_publicNumberDigits },
774   { 0, 0, 0, NULL }
775 };
776
777 static int
778 dissect_qsig_PublicPartyNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
779   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
780                                    PublicPartyNumber_sequence, hf_index, ett_qsig_PublicPartyNumber);
781
782   return offset;
783 }
784 static int dissect_publicPartyNumber_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
785   return dissect_qsig_PublicPartyNumber(TRUE, tvb, offset, pinfo, tree, hf_qsig_publicPartyNumber);
786 }
787
788
789 static const value_string qsig_PrivateTypeOfNumber_vals[] = {
790   {   0, "unknown" },
791   {   1, "level2RegionalNumber" },
792   {   2, "level1RegionalNumber" },
793   {   3, "pISNSpecificNumber" },
794   {   4, "localNumber" },
795   {   6, "abbreviatedNumber" },
796   { 0, NULL }
797 };
798
799
800 static int
801 dissect_qsig_PrivateTypeOfNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
802   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
803                                   NULL);
804
805   return offset;
806 }
807 static int dissect_privateTypeOfNumber(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
808   return dissect_qsig_PrivateTypeOfNumber(FALSE, tvb, offset, pinfo, tree, hf_qsig_privateTypeOfNumber);
809 }
810
811
812 static const ber_sequence_t PrivatePartyNumber_sequence[] = {
813   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_privateTypeOfNumber },
814   { BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_privateNumberDigits },
815   { 0, 0, 0, NULL }
816 };
817
818 static int
819 dissect_qsig_PrivatePartyNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
820   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
821                                    PrivatePartyNumber_sequence, hf_index, ett_qsig_PrivatePartyNumber);
822
823   return offset;
824 }
825 static int dissect_privatePartyNumber_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
826   return dissect_qsig_PrivatePartyNumber(TRUE, tvb, offset, pinfo, tree, hf_qsig_privatePartyNumber);
827 }
828
829
830 static const value_string qsig_PartyNumber_vals[] = {
831   {   0, "unknownPartyNumber" },
832   {   1, "publicPartyNumber" },
833   {   3, "dataPartyNumber" },
834   {   4, "telexPartyNumber" },
835   {   5, "privatePartyNumber" },
836   {   8, "nationalStandardPartyNumber" },
837   { 0, NULL }
838 };
839
840 static const ber_choice_t PartyNumber_choice[] = {
841   {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_unknownPartyNumber_impl },
842   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_publicPartyNumber_impl },
843   {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_dataPartyNumber_impl },
844   {   4, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_telexPartyNumber_impl },
845   {   5, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_privatePartyNumber_impl },
846   {   8, BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_nationalStandardPartyNumber_impl },
847   { 0, 0, 0, 0, NULL }
848 };
849
850 static int
851 dissect_qsig_PartyNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
852   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
853                                  PartyNumber_choice, hf_index, ett_qsig_PartyNumber,
854                                  NULL);
855
856   return offset;
857 }
858 static int dissect_presentationAllowedAddressNU(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
859   return dissect_qsig_PartyNumber(FALSE, tvb, offset, pinfo, tree, hf_qsig_presentationAllowedAddressNU);
860 }
861 static int dissect_presentationRestrictedAddressNU(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
862   return dissect_qsig_PartyNumber(FALSE, tvb, offset, pinfo, tree, hf_qsig_presentationRestrictedAddressNU);
863 }
864 static int dissect_partyNumber(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
865   return dissect_qsig_PartyNumber(FALSE, tvb, offset, pinfo, tree, hf_qsig_partyNumber);
866 }
867 static int dissect_servedUserNr(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
868   return dissect_qsig_PartyNumber(FALSE, tvb, offset, pinfo, tree, hf_qsig_servedUserNr);
869 }
870 static int dissect_activatingUserNr(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
871   return dissect_qsig_PartyNumber(FALSE, tvb, offset, pinfo, tree, hf_qsig_activatingUserNr);
872 }
873 static int dissect_deactivatingUserNr(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
874   return dissect_qsig_PartyNumber(FALSE, tvb, offset, pinfo, tree, hf_qsig_deactivatingUserNr);
875 }
876 static int dissect_interrogatingUserNr(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
877   return dissect_qsig_PartyNumber(FALSE, tvb, offset, pinfo, tree, hf_qsig_interrogatingUserNr);
878 }
879 static int dissect_divertedToNr(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
880   return dissect_qsig_PartyNumber(FALSE, tvb, offset, pinfo, tree, hf_qsig_divertedToNr);
881 }
882 static int dissect_nominatedNr(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
883   return dissect_qsig_PartyNumber(FALSE, tvb, offset, pinfo, tree, hf_qsig_nominatedNr);
884 }
885
886
887 static const value_string qsig_ScreeningIndicator_vals[] = {
888   {   0, "userProvidedNotScreened" },
889   {   1, "userProvidedVerifiedAndPassed" },
890   {   2, "userProvidedVerifiedAndFailed" },
891   {   3, "networkProvided" },
892   { 0, NULL }
893 };
894
895
896 static int
897 dissect_qsig_ScreeningIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
898   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
899                                   NULL);
900
901   return offset;
902 }
903 static int dissect_screeningIndicator(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
904   return dissect_qsig_ScreeningIndicator(FALSE, tvb, offset, pinfo, tree, hf_qsig_screeningIndicator);
905 }
906
907
908
909 static int
910 dissect_qsig_SubaddressInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
911   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
912                                        NULL);
913
914   return offset;
915 }
916 static int dissect_subaddressInformation(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
917   return dissect_qsig_SubaddressInformation(FALSE, tvb, offset, pinfo, tree, hf_qsig_subaddressInformation);
918 }
919
920
921
922 static int
923 dissect_qsig_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
924   offset = dissect_ber_boolean(implicit_tag, pinfo, tree, tvb, offset, hf_index);
925
926   return offset;
927 }
928 static int dissect_oddCountIndicator(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
929   return dissect_qsig_BOOLEAN(FALSE, tvb, offset, pinfo, tree, hf_qsig_oddCountIndicator);
930 }
931 static int dissect_remoteEnabled(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
932   return dissect_qsig_BOOLEAN(FALSE, tvb, offset, pinfo, tree, hf_qsig_remoteEnabled);
933 }
934
935
936 static const ber_sequence_t UserSpecifiedSubaddress_sequence[] = {
937   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_subaddressInformation },
938   { BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_oddCountIndicator },
939   { 0, 0, 0, NULL }
940 };
941
942 static int
943 dissect_qsig_UserSpecifiedSubaddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
944   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
945                                    UserSpecifiedSubaddress_sequence, hf_index, ett_qsig_UserSpecifiedSubaddress);
946
947   return offset;
948 }
949 static int dissect_userSpecifiedSubaddress(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
950   return dissect_qsig_UserSpecifiedSubaddress(FALSE, tvb, offset, pinfo, tree, hf_qsig_userSpecifiedSubaddress);
951 }
952
953
954
955 static int
956 dissect_qsig_NSAPSubaddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
957   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
958                                        NULL);
959
960   return offset;
961 }
962 static int dissect_nSAPSubaddress(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
963   return dissect_qsig_NSAPSubaddress(FALSE, tvb, offset, pinfo, tree, hf_qsig_nSAPSubaddress);
964 }
965
966
967 static const value_string qsig_PartySubaddress_vals[] = {
968   {   0, "userSpecifiedSubaddress" },
969   {   1, "nSAPSubaddress" },
970   { 0, NULL }
971 };
972
973 static const ber_choice_t PartySubaddress_choice[] = {
974   {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_userSpecifiedSubaddress },
975   {   1, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_nSAPSubaddress },
976   { 0, 0, 0, 0, NULL }
977 };
978
979 static int
980 dissect_qsig_PartySubaddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
981   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
982                                  PartySubaddress_choice, hf_index, ett_qsig_PartySubaddress,
983                                  NULL);
984
985   return offset;
986 }
987 static int dissect_partySubaddress(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
988   return dissect_qsig_PartySubaddress(FALSE, tvb, offset, pinfo, tree, hf_qsig_partySubaddress);
989 }
990 static int dissect_callingPartySubaddress(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
991   return dissect_qsig_PartySubaddress(FALSE, tvb, offset, pinfo, tree, hf_qsig_callingPartySubaddress);
992 }
993
994
995 static const ber_sequence_t AddressScreened_sequence[] = {
996   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_partyNumber },
997   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_screeningIndicator },
998   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_partySubaddress },
999   { 0, 0, 0, NULL }
1000 };
1001
1002 static int
1003 dissect_qsig_AddressScreened(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1004   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1005                                    AddressScreened_sequence, hf_index, ett_qsig_AddressScreened);
1006
1007   return offset;
1008 }
1009 static int dissect_presentationAllowedAddressS_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1010   return dissect_qsig_AddressScreened(TRUE, tvb, offset, pinfo, tree, hf_qsig_presentationAllowedAddressS);
1011 }
1012 static int dissect_presentationRestrictedAddressS_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1013   return dissect_qsig_AddressScreened(TRUE, tvb, offset, pinfo, tree, hf_qsig_presentationRestrictedAddressS);
1014 }
1015
1016
1017
1018 static int
1019 dissect_qsig_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1020   offset = dissect_ber_null(implicit_tag, pinfo, tree, tvb, offset, hf_index);
1021
1022   return offset;
1023 }
1024 static int dissect_presentationRestricted_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1025   return dissect_qsig_NULL(TRUE, tvb, offset, pinfo, tree, hf_qsig_presentationRestricted);
1026 }
1027 static int dissect_numberNotAvailableDueToInterworking_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1028   return dissect_qsig_NULL(TRUE, tvb, offset, pinfo, tree, hf_qsig_numberNotAvailableDueToInterworking);
1029 }
1030 static int dissect_namePresentationRestrictedNull_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1031   return dissect_qsig_NULL(TRUE, tvb, offset, pinfo, tree, hf_qsig_namePresentationRestrictedNull);
1032 }
1033 static int dissect_null(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1034   return dissect_qsig_NULL(FALSE, tvb, offset, pinfo, tree, hf_qsig_null);
1035 }
1036
1037
1038 static const value_string qsig_PresentedAddressScreened_vals[] = {
1039   {   0, "presentationAllowedAddressS" },
1040   {   1, "presentationRestricted" },
1041   {   2, "numberNotAvailableDueToInterworking" },
1042   {   3, "presentationRestrictedAddressS" },
1043   { 0, NULL }
1044 };
1045
1046 static const ber_choice_t PresentedAddressScreened_choice[] = {
1047   {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_presentationAllowedAddressS_impl },
1048   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_presentationRestricted_impl },
1049   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_numberNotAvailableDueToInterworking_impl },
1050   {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_presentationRestrictedAddressS_impl },
1051   { 0, 0, 0, 0, NULL }
1052 };
1053
1054 static int
1055 dissect_qsig_PresentedAddressScreened(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1056   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1057                                  PresentedAddressScreened_choice, hf_index, ett_qsig_PresentedAddressScreened,
1058                                  NULL);
1059
1060   return offset;
1061 }
1062
1063
1064 static const ber_sequence_t Address_sequence[] = {
1065   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_partyNumber },
1066   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_partySubaddress },
1067   { 0, 0, 0, NULL }
1068 };
1069
1070 static int
1071 dissect_qsig_Address(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1072   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1073                                    Address_sequence, hf_index, ett_qsig_Address);
1074
1075   return offset;
1076 }
1077 static int dissect_presentationAllowedAddressU_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1078   return dissect_qsig_Address(TRUE, tvb, offset, pinfo, tree, hf_qsig_presentationAllowedAddressU);
1079 }
1080 static int dissect_presentationRestrictedAddressU_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1081   return dissect_qsig_Address(TRUE, tvb, offset, pinfo, tree, hf_qsig_presentationRestrictedAddressU);
1082 }
1083 static int dissect_divertedToAddress(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1084   return dissect_qsig_Address(FALSE, tvb, offset, pinfo, tree, hf_qsig_divertedToAddress);
1085 }
1086 static int dissect_calledAddress(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1087   return dissect_qsig_Address(FALSE, tvb, offset, pinfo, tree, hf_qsig_calledAddress);
1088 }
1089
1090
1091 static const value_string qsig_PresentedAddressUnscreened_vals[] = {
1092   {   0, "presentationAllowedAddressU" },
1093   {   1, "presentationRestricted" },
1094   {   2, "numberNotAvailableDueToInterworking" },
1095   {   3, "presentationRestrictedAddressU" },
1096   { 0, NULL }
1097 };
1098
1099 static const ber_choice_t PresentedAddressUnscreened_choice[] = {
1100   {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_presentationAllowedAddressU_impl },
1101   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_presentationRestricted_impl },
1102   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_numberNotAvailableDueToInterworking_impl },
1103   {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_presentationRestrictedAddressU_impl },
1104   { 0, 0, 0, 0, NULL }
1105 };
1106
1107 static int
1108 dissect_qsig_PresentedAddressUnscreened(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1109   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1110                                  PresentedAddressUnscreened_choice, hf_index, ett_qsig_PresentedAddressUnscreened,
1111                                  NULL);
1112
1113   return offset;
1114 }
1115
1116
1117 static const ber_sequence_t NumberScreened_sequence[] = {
1118   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_partyNumber },
1119   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_screeningIndicator },
1120   { 0, 0, 0, NULL }
1121 };
1122
1123 static int
1124 dissect_qsig_NumberScreened(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1125   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1126                                    NumberScreened_sequence, hf_index, ett_qsig_NumberScreened);
1127
1128   return offset;
1129 }
1130 static int dissect_presentationAllowedAddressNS_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1131   return dissect_qsig_NumberScreened(TRUE, tvb, offset, pinfo, tree, hf_qsig_presentationAllowedAddressNS);
1132 }
1133 static int dissect_presentationRestrictedAddressNS_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1134   return dissect_qsig_NumberScreened(TRUE, tvb, offset, pinfo, tree, hf_qsig_presentationRestrictedAddressNS);
1135 }
1136
1137
1138 static const value_string qsig_PresentedNumberScreened_vals[] = {
1139   {   0, "presentationAllowedAddressNS" },
1140   {   1, "presentationRestricted" },
1141   {   2, "numberNotAvailableDueToInterworking" },
1142   {   3, "presentationRestrictedAddressNS" },
1143   { 0, NULL }
1144 };
1145
1146 static const ber_choice_t PresentedNumberScreened_choice[] = {
1147   {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_presentationAllowedAddressNS_impl },
1148   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_presentationRestricted_impl },
1149   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_numberNotAvailableDueToInterworking_impl },
1150   {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_presentationRestrictedAddressNS_impl },
1151   { 0, 0, 0, 0, NULL }
1152 };
1153
1154 static int
1155 dissect_qsig_PresentedNumberScreened(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1156   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1157                                  PresentedNumberScreened_choice, hf_index, ett_qsig_PresentedNumberScreened,
1158                                  NULL);
1159
1160   return offset;
1161 }
1162 static int dissect_callingNumber(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1163   return dissect_qsig_PresentedNumberScreened(FALSE, tvb, offset, pinfo, tree, hf_qsig_callingNumber);
1164 }
1165
1166
1167 static const value_string qsig_PresentedNumberUnscreened_vals[] = {
1168   {   0, "presentationAllowedAddressNU" },
1169   {   1, "presentationRestricted" },
1170   {   2, "numberNotAvailableDueToInterworking" },
1171   {   3, "presentationRestrictedAddressNU" },
1172   { 0, NULL }
1173 };
1174
1175 static const ber_choice_t PresentedNumberUnscreened_choice[] = {
1176   {   0, BER_CLASS_CON, 0, 0, dissect_presentationAllowedAddressNU },
1177   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_presentationRestricted_impl },
1178   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_numberNotAvailableDueToInterworking_impl },
1179   {   3, BER_CLASS_CON, 3, 0, dissect_presentationRestrictedAddressNU },
1180   { 0, 0, 0, 0, NULL }
1181 };
1182
1183 static int
1184 dissect_qsig_PresentedNumberUnscreened(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1185   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1186                                  PresentedNumberUnscreened_choice, hf_index, ett_qsig_PresentedNumberUnscreened,
1187                                  NULL);
1188
1189   return offset;
1190 }
1191 static int dissect_lastRerouteingNr(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1192   return dissect_qsig_PresentedNumberUnscreened(FALSE, tvb, offset, pinfo, tree, hf_qsig_lastRerouteingNr);
1193 }
1194 static int dissect_originalCalledNr(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1195   return dissect_qsig_PresentedNumberUnscreened(FALSE, tvb, offset, pinfo, tree, hf_qsig_originalCalledNr);
1196 }
1197 static int dissect_divertingNr(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1198   return dissect_qsig_PresentedNumberUnscreened(FALSE, tvb, offset, pinfo, tree, hf_qsig_divertingNr);
1199 }
1200
1201
1202
1203 static int
1204 dissect_qsig_PresentationAllowedIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1205   offset = dissect_ber_boolean(implicit_tag, pinfo, tree, tvb, offset, hf_index);
1206
1207   return offset;
1208 }
1209 static int dissect_presentationAllowedIndicator(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1210   return dissect_qsig_PresentationAllowedIndicator(FALSE, tvb, offset, pinfo, tree, hf_qsig_presentationAllowedIndicator);
1211 }
1212
1213
1214
1215 static int
1216 dissect_qsig_NameData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1217   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1218                                        NULL);
1219
1220   return offset;
1221 }
1222 static int dissect_namePresentationAllowedSimple_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1223   return dissect_qsig_NameData(TRUE, tvb, offset, pinfo, tree, hf_qsig_namePresentationAllowedSimple);
1224 }
1225 static int dissect_namePresentationRestrictedSimple_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1226   return dissect_qsig_NameData(TRUE, tvb, offset, pinfo, tree, hf_qsig_namePresentationRestrictedSimple);
1227 }
1228 static int dissect_nameData(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1229   return dissect_qsig_NameData(FALSE, tvb, offset, pinfo, tree, hf_qsig_nameData);
1230 }
1231
1232
1233 static const value_string qsig_CharacterSet_vals[] = {
1234   {   0, "unknown" },
1235   {   1, "iso8859-1" },
1236   {   3, "iso8859-2" },
1237   {   4, "iso8859-3" },
1238   {   5, "iso8859-4" },
1239   {   6, "iso8859-5" },
1240   {   7, "iso8859-7" },
1241   {   8, "iso10646-BmpString" },
1242   {   9, "iso10646-utf-8String" },
1243   { 0, NULL }
1244 };
1245
1246
1247 static int
1248 dissect_qsig_CharacterSet(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1249   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1250                                   NULL);
1251
1252   return offset;
1253 }
1254 static int dissect_characterSet(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1255   return dissect_qsig_CharacterSet(FALSE, tvb, offset, pinfo, tree, hf_qsig_characterSet);
1256 }
1257
1258
1259 static const ber_sequence_t NameSet_sequence[] = {
1260   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_nameData },
1261   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_characterSet },
1262   { 0, 0, 0, NULL }
1263 };
1264
1265 static int
1266 dissect_qsig_NameSet(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1267   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1268                                    NameSet_sequence, hf_index, ett_qsig_NameSet);
1269
1270   return offset;
1271 }
1272 static int dissect_namePresentationAllowedExtended_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1273   return dissect_qsig_NameSet(TRUE, tvb, offset, pinfo, tree, hf_qsig_namePresentationAllowedExtended);
1274 }
1275 static int dissect_namePresentationRestrictedExtended_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1276   return dissect_qsig_NameSet(TRUE, tvb, offset, pinfo, tree, hf_qsig_namePresentationRestrictedExtended);
1277 }
1278
1279
1280 static const value_string qsig_NamePresentationAllowed_vals[] = {
1281   {   0, "namePresentationAllowedSimple" },
1282   {   1, "namePresentationAllowedExtended" },
1283   { 0, NULL }
1284 };
1285
1286 static const ber_choice_t NamePresentationAllowed_choice[] = {
1287   {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_namePresentationAllowedSimple_impl },
1288   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_namePresentationAllowedExtended_impl },
1289   { 0, 0, 0, 0, NULL }
1290 };
1291
1292 static int
1293 dissect_qsig_NamePresentationAllowed(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1294   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1295                                  NamePresentationAllowed_choice, hf_index, ett_qsig_NamePresentationAllowed,
1296                                  NULL);
1297
1298   return offset;
1299 }
1300 static int dissect_namePresentationAllowed(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1301   return dissect_qsig_NamePresentationAllowed(FALSE, tvb, offset, pinfo, tree, hf_qsig_namePresentationAllowed);
1302 }
1303
1304
1305 static const value_string qsig_NamePresentationRestricted_vals[] = {
1306   {   2, "namePresentationRestrictedSimple" },
1307   {   3, "namePresentationRestrictedExtended" },
1308   {   7, "namePresentationRestrictedNull" },
1309   { 0, NULL }
1310 };
1311
1312 static const ber_choice_t NamePresentationRestricted_choice[] = {
1313   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_namePresentationRestrictedSimple_impl },
1314   {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_namePresentationRestrictedExtended_impl },
1315   {   7, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_namePresentationRestrictedNull_impl },
1316   { 0, 0, 0, 0, NULL }
1317 };
1318
1319 static int
1320 dissect_qsig_NamePresentationRestricted(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1321   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1322                                  NamePresentationRestricted_choice, hf_index, ett_qsig_NamePresentationRestricted,
1323                                  NULL);
1324
1325   return offset;
1326 }
1327 static int dissect_namePresentationRestricted(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1328   return dissect_qsig_NamePresentationRestricted(FALSE, tvb, offset, pinfo, tree, hf_qsig_namePresentationRestricted);
1329 }
1330
1331
1332
1333 static int
1334 dissect_qsig_NameNotAvailable(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1335   offset = dissect_ber_tagged_type(implicit_tag, pinfo, tree, tvb, offset,
1336                                       hf_index, BER_CLASS_CON, 4, TRUE, dissect_qsig_NULL);
1337
1338   return offset;
1339 }
1340 static int dissect_nameNotAvailable(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1341   return dissect_qsig_NameNotAvailable(FALSE, tvb, offset, pinfo, tree, hf_qsig_nameNotAvailable);
1342 }
1343
1344
1345 static const ber_choice_t Name_choice[] = {
1346   {   0, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_namePresentationAllowed },
1347   {   1, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_namePresentationRestricted },
1348   {   2, BER_CLASS_CON, 4, BER_FLAGS_NOOWNTAG, dissect_nameNotAvailable },
1349   { 0, 0, 0, 0, NULL }
1350 };
1351
1352 int
1353 dissect_qsig_Name(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1354   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1355                                  Name_choice, hf_index, ett_qsig_Name,
1356                                  NULL);
1357
1358   return offset;
1359 }
1360 static int dissect_name(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1361   return dissect_qsig_Name(FALSE, tvb, offset, pinfo, tree, hf_qsig_name);
1362 }
1363 static int dissect_callingName(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1364   return dissect_qsig_Name(FALSE, tvb, offset, pinfo, tree, hf_qsig_callingName);
1365 }
1366 static int dissect_redirectingName(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1367   return dissect_qsig_Name(FALSE, tvb, offset, pinfo, tree, hf_qsig_redirectingName);
1368 }
1369 static int dissect_originalCalledName(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1370   return dissect_qsig_Name(FALSE, tvb, offset, pinfo, tree, hf_qsig_originalCalledName);
1371 }
1372 static int dissect_redirectionName(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1373   return dissect_qsig_Name(FALSE, tvb, offset, pinfo, tree, hf_qsig_redirectionName);
1374 }
1375
1376
1377 static const ber_sequence_t SEQUENCE_OF_Extension_sequence_of[1] = {
1378   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_multiple_item },
1379 };
1380
1381 static int
1382 dissect_qsig_SEQUENCE_OF_Extension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1383   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
1384                                       SEQUENCE_OF_Extension_sequence_of, hf_index, ett_qsig_SEQUENCE_OF_Extension);
1385
1386   return offset;
1387 }
1388 static int dissect_multiple_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1389   return dissect_qsig_SEQUENCE_OF_Extension(TRUE, tvb, offset, pinfo, tree, hf_qsig_multiple);
1390 }
1391
1392
1393 static const value_string qsig_NameExtension_vals[] = {
1394   {   5, "single" },
1395   {   6, "multiple" },
1396   { 0, NULL }
1397 };
1398
1399 static const ber_choice_t NameExtension_choice[] = {
1400   {   5, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_single_impl },
1401   {   6, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_multiple_impl },
1402   { 0, 0, 0, 0, NULL }
1403 };
1404
1405 static int
1406 dissect_qsig_NameExtension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1407   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1408                                  NameExtension_choice, hf_index, ett_qsig_NameExtension,
1409                                  NULL);
1410
1411   return offset;
1412 }
1413 static int dissect_extensionNA(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1414   return dissect_qsig_NameExtension(FALSE, tvb, offset, pinfo, tree, hf_qsig_extensionNA);
1415 }
1416
1417
1418 static const ber_sequence_t T_nameSequence_sequence[] = {
1419   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_name },
1420   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_extensionNA },
1421   { 0, 0, 0, NULL }
1422 };
1423
1424 static int
1425 dissect_qsig_T_nameSequence(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1426   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1427                                    T_nameSequence_sequence, hf_index, ett_qsig_T_nameSequence);
1428
1429   return offset;
1430 }
1431 static int dissect_nameSequence(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1432   return dissect_qsig_T_nameSequence(FALSE, tvb, offset, pinfo, tree, hf_qsig_nameSequence);
1433 }
1434
1435
1436 static const value_string qsig_NameArg_vals[] = {
1437   {   0, "name" },
1438   {   1, "nameSequence" },
1439   { 0, NULL }
1440 };
1441
1442 static const ber_choice_t NameArg_choice[] = {
1443   {   0, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_name },
1444   {   1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_nameSequence },
1445   { 0, 0, 0, 0, NULL }
1446 };
1447
1448 static int
1449 dissect_qsig_NameArg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1450   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1451                                  NameArg_choice, hf_index, ett_qsig_NameArg,
1452                                  NULL);
1453
1454   return offset;
1455 }
1456
1457
1458 static const value_string qsig_Procedure_vals[] = {
1459   {   0, "cfu" },
1460   {   1, "cfb" },
1461   {   2, "cfnr" },
1462   { 0, NULL }
1463 };
1464
1465
1466 static int
1467 dissect_qsig_Procedure(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1468   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1469                                   NULL);
1470
1471   return offset;
1472 }
1473 static int dissect_procedure(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1474   return dissect_qsig_Procedure(FALSE, tvb, offset, pinfo, tree, hf_qsig_procedure);
1475 }
1476
1477
1478 static const value_string qsig_BasicService_vals[] = {
1479   {   0, "allServices" },
1480   {   1, "speech" },
1481   {   2, "unrestrictedDigitalInformation" },
1482   {   3, "audio3100Hz" },
1483   {  32, "telephony" },
1484   {  33, "teletex" },
1485   {  34, "telefaxGroup4Class1" },
1486   {  35, "videotexSyntaxBased" },
1487   {  36, "videotelephony" },
1488   { 0, NULL }
1489 };
1490
1491
1492 static int
1493 dissect_qsig_BasicService(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1494   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1495                                   NULL);
1496
1497   return offset;
1498 }
1499 static int dissect_basicService(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1500   return dissect_qsig_BasicService(FALSE, tvb, offset, pinfo, tree, hf_qsig_basicService);
1501 }
1502
1503
1504 static const value_string qsig_ADExtension_vals[] = {
1505   {   1, "single" },
1506   {   2, "multiple" },
1507   { 0, NULL }
1508 };
1509
1510 static const ber_choice_t ADExtension_choice[] = {
1511   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_single_impl },
1512   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_multiple_impl },
1513   { 0, 0, 0, 0, NULL }
1514 };
1515
1516 static int
1517 dissect_qsig_ADExtension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1518   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1519                                  ADExtension_choice, hf_index, ett_qsig_ADExtension,
1520                                  NULL);
1521
1522   return offset;
1523 }
1524 static int dissect_extensionAD(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1525   return dissect_qsig_ADExtension(FALSE, tvb, offset, pinfo, tree, hf_qsig_extensionAD);
1526 }
1527
1528
1529 static const ber_sequence_t ActivateDivArg_sequence[] = {
1530   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_procedure },
1531   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_basicService },
1532   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_divertedToAddress },
1533   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_servedUserNr },
1534   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_activatingUserNr },
1535   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_extensionAD },
1536   { 0, 0, 0, NULL }
1537 };
1538
1539 static int
1540 dissect_qsig_ActivateDivArg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1541   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1542                                    ActivateDivArg_sequence, hf_index, ett_qsig_ActivateDivArg);
1543
1544   return offset;
1545 }
1546
1547
1548 static const value_string qsig_ActivateDivRes_vals[] = {
1549   {   0, "null" },
1550   {   1, "single" },
1551   {   2, "multiple" },
1552   { 0, NULL }
1553 };
1554
1555 static const ber_choice_t ActivateDivRes_choice[] = {
1556   {   0, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_null },
1557   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_single_impl },
1558   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_multiple_impl },
1559   { 0, 0, 0, 0, NULL }
1560 };
1561
1562 static int
1563 dissect_qsig_ActivateDivRes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1564   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1565                                  ActivateDivRes_choice, hf_index, ett_qsig_ActivateDivRes,
1566                                  NULL);
1567
1568   return offset;
1569 }
1570
1571
1572 static const value_string qsig_DDExtension_vals[] = {
1573   {   1, "single" },
1574   {   2, "multiple" },
1575   { 0, NULL }
1576 };
1577
1578 static const ber_choice_t DDExtension_choice[] = {
1579   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_single_impl },
1580   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_multiple_impl },
1581   { 0, 0, 0, 0, NULL }
1582 };
1583
1584 static int
1585 dissect_qsig_DDExtension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1586   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1587                                  DDExtension_choice, hf_index, ett_qsig_DDExtension,
1588                                  NULL);
1589
1590   return offset;
1591 }
1592 static int dissect_extensionDD(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1593   return dissect_qsig_DDExtension(FALSE, tvb, offset, pinfo, tree, hf_qsig_extensionDD);
1594 }
1595
1596
1597 static const ber_sequence_t DeactivateDivArg_sequence[] = {
1598   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_procedure },
1599   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_basicService },
1600   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_servedUserNr },
1601   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_deactivatingUserNr },
1602   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_extensionDD },
1603   { 0, 0, 0, NULL }
1604 };
1605
1606 static int
1607 dissect_qsig_DeactivateDivArg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1608   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1609                                    DeactivateDivArg_sequence, hf_index, ett_qsig_DeactivateDivArg);
1610
1611   return offset;
1612 }
1613
1614
1615 static const value_string qsig_DeactivateDivRes_vals[] = {
1616   {   0, "null" },
1617   {   1, "single" },
1618   {   2, "multiple" },
1619   { 0, NULL }
1620 };
1621
1622 static const ber_choice_t DeactivateDivRes_choice[] = {
1623   {   0, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_null },
1624   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_single_impl },
1625   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_multiple_impl },
1626   { 0, 0, 0, 0, NULL }
1627 };
1628
1629 static int
1630 dissect_qsig_DeactivateDivRes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1631   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1632                                  DeactivateDivRes_choice, hf_index, ett_qsig_DeactivateDivRes,
1633                                  NULL);
1634
1635   return offset;
1636 }
1637
1638
1639 static const value_string qsig_IDExtension_vals[] = {
1640   {   1, "single" },
1641   {   2, "multiple" },
1642   { 0, NULL }
1643 };
1644
1645 static const ber_choice_t IDExtension_choice[] = {
1646   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_single_impl },
1647   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_multiple_impl },
1648   { 0, 0, 0, 0, NULL }
1649 };
1650
1651 static int
1652 dissect_qsig_IDExtension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1653   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1654                                  IDExtension_choice, hf_index, ett_qsig_IDExtension,
1655                                  NULL);
1656
1657   return offset;
1658 }
1659 static int dissect_extensionID(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1660   return dissect_qsig_IDExtension(FALSE, tvb, offset, pinfo, tree, hf_qsig_extensionID);
1661 }
1662
1663
1664 static const ber_sequence_t InterrDivArg_sequence[] = {
1665   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_procedure },
1666   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_basicService },
1667   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_servedUserNr },
1668   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_interrogatingUserNr },
1669   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_extensionID },
1670   { 0, 0, 0, NULL }
1671 };
1672
1673 static int
1674 dissect_qsig_InterrDivArg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1675   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1676                                    InterrDivArg_sequence, hf_index, ett_qsig_InterrDivArg);
1677
1678   return offset;
1679 }
1680
1681
1682 static const value_string qsig_CHRExtension_vals[] = {
1683   {   1, "single" },
1684   {   2, "multiple" },
1685   { 0, NULL }
1686 };
1687
1688 static const ber_choice_t CHRExtension_choice[] = {
1689   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_single_impl },
1690   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_multiple_impl },
1691   { 0, 0, 0, 0, NULL }
1692 };
1693
1694 static int
1695 dissect_qsig_CHRExtension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1696   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1697                                  CHRExtension_choice, hf_index, ett_qsig_CHRExtension,
1698                                  NULL);
1699
1700   return offset;
1701 }
1702 static int dissect_extensionCHR(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1703   return dissect_qsig_CHRExtension(FALSE, tvb, offset, pinfo, tree, hf_qsig_extensionCHR);
1704 }
1705
1706
1707 static const ber_sequence_t ChkResArg_sequence[] = {
1708   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_servedUserNr },
1709   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_basicService },
1710   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_divertedToNr },
1711   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_extensionCHR },
1712   { 0, 0, 0, NULL }
1713 };
1714
1715 static int
1716 dissect_qsig_ChkResArg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1717   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1718                                    ChkResArg_sequence, hf_index, ett_qsig_ChkResArg);
1719
1720   return offset;
1721 }
1722
1723
1724 static const value_string qsig_ChkResRes_vals[] = {
1725   {   0, "null" },
1726   {   1, "single" },
1727   {   2, "multiple" },
1728   { 0, NULL }
1729 };
1730
1731 static const ber_choice_t ChkResRes_choice[] = {
1732   {   0, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_null },
1733   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_single_impl },
1734   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_multiple_impl },
1735   { 0, 0, 0, 0, NULL }
1736 };
1737
1738 static int
1739 dissect_qsig_ChkResRes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1740   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1741                                  ChkResRes_choice, hf_index, ett_qsig_ChkResRes,
1742                                  NULL);
1743
1744   return offset;
1745 }
1746
1747
1748 static const value_string qsig_DiversionReason_vals[] = {
1749   {   0, "unknown" },
1750   {   1, "cfu" },
1751   {   2, "cfb" },
1752   {   3, "cfnr" },
1753   { 0, NULL }
1754 };
1755
1756
1757 static int
1758 dissect_qsig_DiversionReason(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1759   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1760                                   NULL);
1761
1762   return offset;
1763 }
1764 static int dissect_rerouteingReason(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1765   return dissect_qsig_DiversionReason(FALSE, tvb, offset, pinfo, tree, hf_qsig_rerouteingReason);
1766 }
1767 static int dissect_originalRerouteingReason_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1768   return dissect_qsig_DiversionReason(TRUE, tvb, offset, pinfo, tree, hf_qsig_originalRerouteingReason);
1769 }
1770 static int dissect_diversionReason(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1771   return dissect_qsig_DiversionReason(FALSE, tvb, offset, pinfo, tree, hf_qsig_diversionReason);
1772 }
1773 static int dissect_originalDiversionReason_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1774   return dissect_qsig_DiversionReason(TRUE, tvb, offset, pinfo, tree, hf_qsig_originalDiversionReason);
1775 }
1776
1777
1778
1779 static int
1780 dissect_qsig_INTEGER_1_15(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1781   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1782                                   NULL);
1783
1784   return offset;
1785 }
1786 static int dissect_diversionCounter(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1787   return dissect_qsig_INTEGER_1_15(FALSE, tvb, offset, pinfo, tree, hf_qsig_diversionCounter);
1788 }
1789
1790
1791 static const value_string qsig_SubscriptionOption_vals[] = {
1792   {   0, "noNotification" },
1793   {   1, "notificationWithoutDivertedToNr" },
1794   {   2, "notificationWithDivertedToNr" },
1795   { 0, NULL }
1796 };
1797
1798
1799 static int
1800 dissect_qsig_SubscriptionOption(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1801   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1802                                   NULL);
1803
1804   return offset;
1805 }
1806 static int dissect_subscriptionOption(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1807   return dissect_qsig_SubscriptionOption(FALSE, tvb, offset, pinfo, tree, hf_qsig_subscriptionOption);
1808 }
1809 static int dissect_subscriptionOption_impl(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1810   return dissect_qsig_SubscriptionOption(TRUE, tvb, offset, pinfo, tree, hf_qsig_subscriptionOption);
1811 }
1812
1813
1814 static const value_string qsig_CRRExtension_vals[] = {
1815   {   9, "single" },
1816   {  10, "multiple" },
1817   { 0, NULL }
1818 };
1819
1820 static const ber_choice_t CRRExtension_choice[] = {
1821   {   9, BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_single_impl },
1822   {  10, BER_CLASS_CON, 10, BER_FLAGS_IMPLTAG, dissect_multiple_impl },
1823   { 0, 0, 0, 0, NULL }
1824 };
1825
1826 static int
1827 dissect_qsig_CRRExtension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1828   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1829                                  CRRExtension_choice, hf_index, ett_qsig_CRRExtension,
1830                                  NULL);
1831
1832   return offset;
1833 }
1834 static int dissect_extensionCRR(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1835   return dissect_qsig_CRRExtension(FALSE, tvb, offset, pinfo, tree, hf_qsig_extensionCRR);
1836 }
1837
1838
1839 static const ber_sequence_t CallRrArg_sequence[] = {
1840   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_rerouteingReason },
1841   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_originalRerouteingReason_impl },
1842   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_calledAddress },
1843   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_diversionCounter },
1844   { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_pSS1InfoElement },
1845   { BER_CLASS_CON, 1, BER_FLAGS_NOTCHKTAG, dissect_lastRerouteingNr },
1846   { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_subscriptionOption_impl },
1847   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_callingPartySubaddress },
1848   { BER_CLASS_CON, 4, BER_FLAGS_NOTCHKTAG, dissect_callingNumber },
1849   { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_callingName },
1850   { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_originalCalledNr },
1851   { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_redirectingName },
1852   { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_originalCalledName },
1853   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_extensionCRR },
1854   { 0, 0, 0, NULL }
1855 };
1856
1857 static int
1858 dissect_qsig_CallRrArg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1859   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1860                                    CallRrArg_sequence, hf_index, ett_qsig_CallRrArg);
1861
1862   return offset;
1863 }
1864
1865
1866 static const value_string qsig_CallRrRes_vals[] = {
1867   {   0, "null" },
1868   {   1, "single" },
1869   {   2, "multiple" },
1870   { 0, NULL }
1871 };
1872
1873 static const ber_choice_t CallRrRes_choice[] = {
1874   {   0, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_null },
1875   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_single_impl },
1876   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_multiple_impl },
1877   { 0, 0, 0, 0, NULL }
1878 };
1879
1880 static int
1881 dissect_qsig_CallRrRes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1882   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1883                                  CallRrRes_choice, hf_index, ett_qsig_CallRrRes,
1884                                  NULL);
1885
1886   return offset;
1887 }
1888
1889
1890 static const value_string qsig_DLI1Extension_vals[] = {
1891   {   9, "single" },
1892   {  10, "multiple" },
1893   { 0, NULL }
1894 };
1895
1896 static const ber_choice_t DLI1Extension_choice[] = {
1897   {   9, BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_single_impl },
1898   {  10, BER_CLASS_CON, 10, BER_FLAGS_IMPLTAG, dissect_multiple_impl },
1899   { 0, 0, 0, 0, NULL }
1900 };
1901
1902 static int
1903 dissect_qsig_DLI1Extension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1904   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1905                                  DLI1Extension_choice, hf_index, ett_qsig_DLI1Extension,
1906                                  NULL);
1907
1908   return offset;
1909 }
1910 static int dissect_extensionDLI1(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1911   return dissect_qsig_DLI1Extension(FALSE, tvb, offset, pinfo, tree, hf_qsig_extensionDLI1);
1912 }
1913
1914
1915 static const ber_sequence_t DivLegInf1Arg_sequence[] = {
1916   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_diversionReason },
1917   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_subscriptionOption },
1918   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_nominatedNr },
1919   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_extensionDLI1 },
1920   { 0, 0, 0, NULL }
1921 };
1922
1923 static int
1924 dissect_qsig_DivLegInf1Arg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1925   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1926                                    DivLegInf1Arg_sequence, hf_index, ett_qsig_DivLegInf1Arg);
1927
1928   return offset;
1929 }
1930
1931
1932 static const value_string qsig_DLI2Extension_vals[] = {
1933   {   5, "single" },
1934   {   6, "multiple" },
1935   { 0, NULL }
1936 };
1937
1938 static const ber_choice_t DLI2Extension_choice[] = {
1939   {   5, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_single_impl },
1940   {   6, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_multiple_impl },
1941   { 0, 0, 0, 0, NULL }
1942 };
1943
1944 static int
1945 dissect_qsig_DLI2Extension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1946   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1947                                  DLI2Extension_choice, hf_index, ett_qsig_DLI2Extension,
1948                                  NULL);
1949
1950   return offset;
1951 }
1952 static int dissect_extensionDLI2(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1953   return dissect_qsig_DLI2Extension(FALSE, tvb, offset, pinfo, tree, hf_qsig_extensionDLI2);
1954 }
1955
1956
1957 static const ber_sequence_t DivLegInf2Arg_sequence[] = {
1958   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_diversionCounter },
1959   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_diversionReason },
1960   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_originalDiversionReason_impl },
1961   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_divertingNr },
1962   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_originalCalledNr },
1963   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_redirectingName },
1964   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_originalCalledName },
1965   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_extensionDLI2 },
1966   { 0, 0, 0, NULL }
1967 };
1968
1969 static int
1970 dissect_qsig_DivLegInf2Arg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1971   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1972                                    DivLegInf2Arg_sequence, hf_index, ett_qsig_DivLegInf2Arg);
1973
1974   return offset;
1975 }
1976
1977
1978 static const value_string qsig_DLI3Extension_vals[] = {
1979   {   1, "single" },
1980   {   2, "multiple" },
1981   { 0, NULL }
1982 };
1983
1984 static const ber_choice_t DLI3Extension_choice[] = {
1985   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_single_impl },
1986   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_multiple_impl },
1987   { 0, 0, 0, 0, NULL }
1988 };
1989
1990 static int
1991 dissect_qsig_DLI3Extension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
1992   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1993                                  DLI3Extension_choice, hf_index, ett_qsig_DLI3Extension,
1994                                  NULL);
1995
1996   return offset;
1997 }
1998 static int dissect_extensionDLI3(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
1999   return dissect_qsig_DLI3Extension(FALSE, tvb, offset, pinfo, tree, hf_qsig_extensionDLI3);
2000 }
2001
2002
2003 static const ber_sequence_t DivLegInf3Arg_sequence[] = {
2004   { BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_NOOWNTAG, dissect_presentationAllowedIndicator },
2005   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_redirectionName },
2006   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_extensionDLI3 },
2007   { 0, 0, 0, NULL }
2008 };
2009
2010 static int
2011 dissect_qsig_DivLegInf3Arg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
2012   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
2013                                    DivLegInf3Arg_sequence, hf_index, ett_qsig_DivLegInf3Arg);
2014
2015   return offset;
2016 }
2017
2018
2019 static const value_string qsig_DivLegFailArg_vals[] = {
2020   {   0, "null" },
2021   {   1, "single" },
2022   {   2, "multiple" },
2023   { 0, NULL }
2024 };
2025
2026 static const ber_choice_t DivLegFailArg_choice[] = {
2027   {   0, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_null },
2028   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_single_impl },
2029   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_multiple_impl },
2030   { 0, 0, 0, 0, NULL }
2031 };
2032
2033 static int
2034 dissect_qsig_DivLegFailArg(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
2035   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
2036                                  DivLegFailArg_choice, hf_index, ett_qsig_DivLegFailArg,
2037                                  NULL);
2038
2039   return offset;
2040 }
2041
2042
2043 static const value_string qsig_IRExtension_vals[] = {
2044   {   1, "single" },
2045   {   2, "multiple" },
2046   { 0, NULL }
2047 };
2048
2049 static const ber_choice_t IRExtension_choice[] = {
2050   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_single_impl },
2051   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_multiple_impl },
2052   { 0, 0, 0, 0, NULL }
2053 };
2054
2055 static int
2056 dissect_qsig_IRExtension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
2057   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
2058                                  IRExtension_choice, hf_index, ett_qsig_IRExtension,
2059                                  NULL);
2060
2061   return offset;
2062 }
2063 static int dissect_extensionIR(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
2064   return dissect_qsig_IRExtension(FALSE, tvb, offset, pinfo, tree, hf_qsig_extensionIR);
2065 }
2066
2067
2068 static const ber_sequence_t IntResult_sequence[] = {
2069   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_servedUserNr },
2070   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_basicService },
2071   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_procedure },
2072   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_divertedToAddress },
2073   { BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_remoteEnabled },
2074   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_extensionIR },
2075   { 0, 0, 0, NULL }
2076 };
2077
2078 static int
2079 dissect_qsig_IntResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
2080   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
2081                                    IntResult_sequence, hf_index, ett_qsig_IntResult);
2082
2083   return offset;
2084 }
2085 static int dissect_IntResultList_item(packet_info *pinfo _U_, proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_) {
2086   return dissect_qsig_IntResult(FALSE, tvb, offset, pinfo, tree, hf_qsig_IntResultList_item);
2087 }
2088
2089
2090 static const ber_sequence_t IntResultList_set_of[1] = {
2091   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_IntResultList_item },
2092 };
2093
2094 static int
2095 dissect_qsig_IntResultList(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, int hf_index _U_) {
2096   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
2097                                  IntResultList_set_of, hf_index, ett_qsig_IntResultList);
2098
2099   return offset;
2100 }
2101
2102 /*--- PDUs ---*/
2103
2104 static void dissect_NameArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2105   dissect_qsig_NameArg(FALSE, tvb, 0, pinfo, tree, hf_qsig_NameArg_PDU);
2106 }
2107 static void dissect_ActivateDivArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2108   dissect_qsig_ActivateDivArg(FALSE, tvb, 0, pinfo, tree, hf_qsig_ActivateDivArg_PDU);
2109 }
2110 static void dissect_ActivateDivRes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2111   dissect_qsig_ActivateDivRes(FALSE, tvb, 0, pinfo, tree, hf_qsig_ActivateDivRes_PDU);
2112 }
2113 static void dissect_DeactivateDivArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2114   dissect_qsig_DeactivateDivArg(FALSE, tvb, 0, pinfo, tree, hf_qsig_DeactivateDivArg_PDU);
2115 }
2116 static void dissect_DeactivateDivRes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2117   dissect_qsig_DeactivateDivRes(FALSE, tvb, 0, pinfo, tree, hf_qsig_DeactivateDivRes_PDU);
2118 }
2119 static void dissect_InterrDivArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2120   dissect_qsig_InterrDivArg(FALSE, tvb, 0, pinfo, tree, hf_qsig_InterrDivArg_PDU);
2121 }
2122 static void dissect_ChkResArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2123   dissect_qsig_ChkResArg(FALSE, tvb, 0, pinfo, tree, hf_qsig_ChkResArg_PDU);
2124 }
2125 static void dissect_ChkResRes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2126   dissect_qsig_ChkResRes(FALSE, tvb, 0, pinfo, tree, hf_qsig_ChkResRes_PDU);
2127 }
2128 static void dissect_CallRrArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2129   dissect_qsig_CallRrArg(FALSE, tvb, 0, pinfo, tree, hf_qsig_CallRrArg_PDU);
2130 }
2131 static void dissect_CallRrRes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2132   dissect_qsig_CallRrRes(FALSE, tvb, 0, pinfo, tree, hf_qsig_CallRrRes_PDU);
2133 }
2134 static void dissect_DivLegInf1Arg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2135   dissect_qsig_DivLegInf1Arg(FALSE, tvb, 0, pinfo, tree, hf_qsig_DivLegInf1Arg_PDU);
2136 }
2137 static void dissect_DivLegInf2Arg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2138   dissect_qsig_DivLegInf2Arg(FALSE, tvb, 0, pinfo, tree, hf_qsig_DivLegInf2Arg_PDU);
2139 }
2140 static void dissect_DivLegInf3Arg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2141   dissect_qsig_DivLegInf3Arg(FALSE, tvb, 0, pinfo, tree, hf_qsig_DivLegInf3Arg_PDU);
2142 }
2143 static void dissect_DivLegFailArg_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2144   dissect_qsig_DivLegFailArg(FALSE, tvb, 0, pinfo, tree, hf_qsig_DivLegFailArg_PDU);
2145 }
2146 static void dissect_IntResultList_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2147   dissect_qsig_IntResultList(FALSE, tvb, 0, pinfo, tree, hf_qsig_IntResultList_PDU);
2148 }
2149
2150
2151 /*--- End of included file: packet-qsig-fn.c ---*/
2152 #line 481 "packet-qsig-template.c"
2153
2154
2155 static qsig_op qsig_tab[] = {
2156   /*   0 */ { 13868, FNA(  0), FNR(  0), dissect_NameArg_PDU, NULL },
2157   /*   1 */ { 13868, FNA(  1), FNR(  1), dissect_NameArg_PDU, NULL },
2158   /*   2 */ { 13868, FNA(  2), FNR(  2), dissect_NameArg_PDU, NULL },
2159   /*   3 */ { 13868, FNA(  3), FNR(  3), dissect_NameArg_PDU, NULL },
2160   /*   4 */ { 13874, FNA(  4), FNR(  4), NULL, NULL },
2161   /*   5 */ { 13874, FNA(  5), FNR(  5), NULL, NULL },
2162   /*   6 */ { 13874, FNA(  6), FNR(  6), NULL, NULL },
2163   /*   7 */ { 13869, FNA(  7), FNR(  7), NULL, NULL },
2164   /*   8 */ { 13869, FNA(  8), FNR(  8), NULL, NULL },
2165   /*   9 */ { 13869, FNA(  9), FNR(  9), NULL, NULL },
2166   /*  10 */ { 13869, FNA( 10), FNR( 10), NULL, NULL },
2167   /*  11 */ { 13869, FNA( 11), FNR( 11), NULL, NULL },
2168   /*  12 */ { 13869, FNA( 12), FNR( 12), NULL, NULL },
2169   /*  13 */ { 13869, FNA( 13), FNR( 13), NULL, NULL },
2170   /*  14 */ { 13869, FNA( 14), FNR( 14), NULL, NULL },
2171   /*  15 */ { 13873, FNA( 15), FNR( 15), dissect_ActivateDivArg_PDU, dissect_ActivateDivRes_PDU },
2172   /*  16 */ { 13873, FNA( 16), FNR( 16), dissect_DeactivateDivArg_PDU, dissect_DeactivateDivRes_PDU },
2173   /*  17 */ { 13873, FNA( 17), FNR( 17), dissect_InterrDivArg_PDU, dissect_IntResultList_PDU },
2174   /*  18 */ { 13873, FNA( 18), FNR( 18), dissect_ChkResArg_PDU, dissect_ChkResRes_PDU },
2175   /*  19 */ { 13873, FNA( 19), FNR( 19), dissect_CallRrArg_PDU, dissect_CallRrArg_PDU },
2176   /*  20 */ { 13873, FNA( 20), FNR( 20), dissect_DivLegInf1Arg_PDU, NULL },
2177   /*  21 */ { 13873, FNA( 21), FNR( 21), dissect_DivLegInf2Arg_PDU, NULL },
2178   /*  22 */ { 13873, FNA( 22), FNR( 22), dissect_DivLegInf3Arg_PDU, NULL },
2179   /*  23 */ { 13873, FNA( 23), FNR( 23), dissect_DivLegFailArg_PDU, NULL },
2180   /*  24 */ {    -1,     NULL,     NULL, NULL, NULL },
2181   /*  25 */ {    -1,     NULL,     NULL, NULL, NULL },
2182   /*  26 */ {    -1,     NULL,     NULL, NULL, NULL },
2183   /*  27 */ { 13870, FNA( 27), FNR( 27), NULL, NULL },
2184   /*  28 */ { 13870, FNA( 28), FNR( 28), NULL, NULL },
2185   /*  29 */ { 13870, FNA( 29), FNR( 29), NULL, NULL },
2186   /*  30 */ { 13870, FNA( 30), FNR( 30), NULL, NULL },
2187   /*  31 */ { 13870, FNA( 31), FNR( 31), NULL, NULL },
2188   /*  32 */ { 13870, FNA( 32), FNR( 32), NULL, NULL },
2189   /*  33 */ { 13870, FNA( 33), FNR( 33), NULL, NULL },
2190   /*  34 */ { 14843, FNA( 34), FNR( 34), NULL, NULL },
2191   /*  35 */ { 14844, FNA( 35), FNR( 35), NULL, NULL },
2192   /*  36 */ { 14844, FNA( 36), FNR( 36), NULL, NULL },
2193   /*  37 */ { 14844, FNA( 37), FNR( 37), NULL, NULL },
2194   /*  38 */ { 14844, FNA( 38), FNR( 38), NULL, NULL },
2195   /*  39 */ { 14844, FNA( 39), FNR( 39), NULL, NULL },
2196   /*  40 */ { 13870, FNA( 40), FNR( 40), NULL, NULL },
2197   /*  41 */ { 90001, FNA( 41), FNR( 41), NULL, NULL },
2198   /*  42 */ { 90001, FNA( 42), FNR( 42), NULL, NULL },
2199   /*  43 */ { 14846, FNA( 43), FNR( 43), NULL, NULL },
2200   /*  44 */ { 14846, FNA( 44), FNR( 44), NULL, NULL },
2201   /*  45 */ { 14846, FNA( 45), FNR( 45), NULL, NULL },
2202   /*  46 */ { 14846, FNA( 46), FNR( 46), NULL, NULL },
2203   /*  47 */ { 14846, FNA( 47), FNR( 47), NULL, NULL },
2204   /*  48 */ { 14846, FNA( 48), FNR( 48), NULL, NULL },
2205   /*  49 */ { 90001, FNA( 49), FNR( 49), NULL, NULL },
2206   /*  50 */ { 15429, FNA( 50), FNR( 50), NULL, NULL },
2207   /*  51 */ { 15429, FNA( 51), FNR( 51), NULL, NULL },
2208   /*  52 */ { 15429, FNA( 52), FNR( 52), NULL, NULL },
2209   /*  53 */ { 15429, FNA( 53), FNR( 53), NULL, NULL },
2210   /*  54 */ { 15431, FNA( 54), FNR( 54), NULL, NULL },
2211   /*  55 */ { 15431, FNA( 55), FNR( 55), NULL, NULL },
2212   /*  56 */ { 15431, FNA( 56), FNR( 56), NULL, NULL },
2213   /*  57 */ { 15052, FNA( 57), FNR( 57), NULL, NULL },
2214   /*  58 */ { 15052, FNA( 58), FNR( 58), NULL, NULL },
2215   /*  59 */ { 15050, FNA( 59), FNR( 59), NULL, NULL },
2216   /*  60 */ { 15050, FNA( 60), FNR( 60), NULL, NULL },
2217   /*  61 */ { 15050, FNA( 61), FNR( 61), NULL, NULL },
2218   /*  62 */ { 15050, FNA( 62), FNR( 62), NULL, NULL },
2219   /*  63 */ { 15050, FNA( 63), FNR( 63), NULL, NULL },
2220   /*  64 */ { 15050, FNA( 64), FNR( 64), NULL, NULL },
2221   /*  65 */ { 15050, FNA( 65), FNR( 65), NULL, NULL },
2222   /*  66 */ { 15054, FNA( 66), FNR( 66), NULL, NULL },
2223   /*  67 */ { 15054, FNA( 67), FNR( 67), NULL, NULL },
2224   /*  68 */ { 15054, FNA( 68), FNR( 68), NULL, NULL },
2225   /*  69 */ { 15054, FNA( 69), FNR( 69), NULL, NULL },
2226   /*  70 */ { 15054, FNA( 70), FNR( 70), NULL, NULL },
2227   /*  71 */ { 15431, FNA( 71), FNR( 71), NULL, NULL },
2228   /*  72 */ { 15433, FNA( 72), FNR( 72), NULL, NULL },
2229   /*  73 */ { 15433, FNA( 73), FNR( 73), NULL, NULL },
2230   /*  74 */ { 15433, FNA( 74), FNR( 74), NULL, NULL },
2231   /*  75 */ { 15433, FNA( 75), FNR( 75), NULL, NULL },
2232   /*  76 */ { 15433, FNA( 76), FNR( 76), NULL, NULL },
2233   /*  77 */ { 15433, FNA( 77), FNR( 77), NULL, NULL },
2234   /*  78 */ { 15507, FNA( 78), FNR( 78), NULL, NULL },
2235   /*  79 */ { 15507, FNA( 79), FNR( 79), NULL, NULL },
2236   /*  80 */ { 90002, FNA( 80), FNR( 80), NULL, NULL },
2237   /*  81 */ { 90002, FNA( 81), FNR( 81), NULL, NULL },
2238   /*  82 */ { 90002, FNA( 82), FNR( 82), NULL, NULL },
2239   /*  83 */ {    -1,     NULL,     NULL, NULL, NULL },
2240   /*  84 */ { 15772, FNA( 84), FNR( 84), NULL, NULL },
2241   /*  85 */ { 15772, FNA( 85), FNR( 85), NULL, NULL },
2242   /*  86 */ { 13874, FNA( 86), FNR( 86), NULL, NULL },
2243   /*  87 */ { 15992, FNA( 87), FNR( 87), NULL, NULL },
2244   /*  88 */ { 15992, FNA( 88), FNR( 88), NULL, NULL },
2245   /*  89 */ { 17876, FNA( 89), FNR( 89), NULL, NULL },
2246   /*  90 */ { 17876, FNA( 90), FNR( 90), NULL, NULL },
2247   /*  91 */ { 17876, FNA( 91), FNR( 91), NULL, NULL },
2248   /*  92 */ { 17876, FNA( 92), FNR( 92), NULL, NULL },
2249   /*  93 */ { 17878, FNA( 93), FNR( 93), NULL, NULL },
2250   /*  94 */ { 17878, FNA( 94), FNR( 94), NULL, NULL },
2251   /*  95 */ { 17878, FNA( 95), FNR( 95), NULL, NULL },
2252   /*  96 */ { 17878, FNA( 96), FNR( 96), NULL, NULL },
2253   /*  97 */ { 15429, FNA( 97), FNR( 97), NULL, NULL },
2254   /*  98 */ { 15429, FNA( 98), FNR( 98), NULL, NULL },
2255   /*  99 */ { 19460, FNA( 99), FNR( 99), NULL, NULL },
2256   /* 100 */ { 19460, FNA(100), FNR(100), NULL, NULL },
2257   /* 101 */ { 19460, FNA(101), FNR(101), NULL, NULL },
2258   /* 102 */ { 19460, FNA(102), FNR(102), NULL, NULL },
2259   /* 103 */ { 21407, FNA(103), FNR(103), NULL, NULL },
2260   /* 104 */ { 21407, FNA(104), FNR(104), NULL, NULL },
2261   /* 105 */ { 21889, FNA(105), FNR(105), NULL, NULL },
2262   /* 106 */ { 21889, FNA(106), FNR(106), NULL, NULL },
2263   /* 107 */ {   325, FNA(107), FNR(107), NULL, NULL },
2264   /* 108 */ {   325, FNA(108), FNR(108), NULL, NULL },
2265   /* 109 */ {   325, FNA(109), FNR(109), NULL, NULL },
2266   /* 110 */ {   325, FNA(110), FNR(110), NULL, NULL },
2267   /* 111 */ {   325, FNA(111), FNR(111), NULL, NULL },
2268   /* 112 */ {   344, FNA(112), FNR(112), NULL, NULL },
2269   /* 113 */ {   344, FNA(113), FNR(113), NULL, NULL },
2270   /* 114 */ {   344, FNA(114), FNR(114), NULL, NULL },
2271   /* 115 */ {  3471, FNA(115), FNR(115), NULL, NULL },
2272   /* 116 */ {  3471, FNA(116), FNR(116), NULL, NULL },
2273   /* 117 */ {  3471, FNA(117), FNR(117), NULL, NULL },
2274   /* 118 */ {  3471, FNA(118), FNR(118), NULL, NULL },
2275   /* 119 */ {  3472, FNA(119), FNR(119), NULL, NULL },
2276   /* 120 */ {  3472, FNA(120), FNR(120), NULL, NULL },
2277 };                                 
2278                   
2279 /*--- dissect_qsig_arg ------------------------------------------------------*/
2280 /*static*/ void   
2281 dissect_qsig_arg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 operation) {
2282   gint offset;
2283   const gchar *p;
2284   proto_item *ti, *ti_tmp;
2285   proto_tree *qsig_tree;
2286
2287   offset = 0;
2288   ti = proto_tree_add_item(tree, proto_qsig, tvb, offset, tvb_length(tvb), FALSE);
2289   qsig_tree = proto_item_add_subtree(ti, ett_qsig); 
2290
2291   proto_tree_add_uint(qsig_tree, hf_qsig_operation, tvb, 0, 0, operation);
2292   p = match_strval(operation, VALS(qsig_str_operation));
2293   if (p) {
2294     proto_item_append_text(ti, ": %s", p);
2295     proto_item_append_text(proto_item_get_parent(proto_tree_get_parent(tree)), " %s", p);
2296   }
2297   if (operation >= array_length(qsig_tab)) return;
2298   if (qsig_tab[operation].service != -1) {
2299     ti_tmp = proto_tree_add_uint(qsig_tree, hf_qsig_service, tvb, 0, 0, qsig_tab[operation].service);
2300     p = match_strval(qsig_tab[operation].service, VALS(qsig_str_service_name));
2301     if (p) proto_item_append_text(ti_tmp, " - %s", p);
2302   }
2303   if (qsig_tab[operation].arg_pdu)
2304     qsig_tab[operation].arg_pdu(tvb, pinfo, qsig_tree);
2305   else 
2306     if (tvb_length_remaining(tvb, offset) > 0)
2307       proto_tree_add_text(qsig_tree, tvb, offset, tvb_length_remaining(tvb, offset), "UNSUPPORTED ARGUMENT TYPE (QSIG)");
2308 }
2309
2310 /*--- dissect_qsig_res -------------------------------------------------------*/
2311 /*static*/ void
2312 dissect_qsig_res(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 operation) {
2313   gint offset;
2314   const gchar *p;
2315   proto_item *ti, *ti_tmp;
2316   proto_tree *qsig_tree;
2317
2318   offset = 0;
2319   ti = proto_tree_add_item(tree, proto_qsig, tvb, offset, tvb_length(tvb), FALSE);
2320   qsig_tree = proto_item_add_subtree(ti, ett_qsig); 
2321
2322   proto_tree_add_uint(qsig_tree, hf_qsig_operation, tvb, 0, 0, operation);
2323   p = match_strval(operation, VALS(qsig_str_operation));
2324   if (p) {
2325     proto_item_append_text(ti, ": %s", p);
2326     proto_item_append_text(proto_item_get_parent(proto_tree_get_parent(tree)), " %s", p);
2327   }
2328   if (operation >= array_length(qsig_tab)) return;
2329   if (qsig_tab[operation].service != -1) {
2330     ti_tmp = proto_tree_add_uint(qsig_tree, hf_qsig_service, tvb, 0, 0, qsig_tab[operation].service);
2331     p = match_strval(qsig_tab[operation].service, VALS(qsig_str_service_name));
2332     if (p) proto_item_append_text(ti_tmp, " - %s", p);
2333   }
2334   if (qsig_tab[operation].res_pdu)
2335     qsig_tab[operation].res_pdu(tvb, pinfo, qsig_tree);
2336   else 
2337     if (tvb_length_remaining(tvb, offset) > 0)
2338       proto_tree_add_text(qsig_tree, tvb, offset, tvb_length_remaining(tvb, offset), "UNSUPPORTED RESULT TYPE (QSIG)");
2339 }
2340
2341 /*--- dissect_qsig_transit_counter_ie ---------------------------------------*/
2342 static int
2343 dissect_qsig_transit_counter_ie(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int length) {
2344   proto_tree_add_item(tree, hf_qsig_tc, tvb, offset, 1, FALSE);
2345   offset++;
2346   return offset;
2347 }
2348 /*--- dissect_qsig_party_category_ie ----------------------------------------*/
2349 static int 
2350 dissect_qsig_party_category_ie(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int length) {
2351   proto_tree_add_item(tree, hf_qsig_pc, tvb, offset, 1, FALSE);
2352   offset++;
2353   return offset;
2354 }
2355
2356 /*--- dissect_qsig_ie -------------------------------------------------------*/
2357 static void
2358 dissect_qsig_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int codeset) {
2359   gint offset;
2360   proto_item *ti, *ti_ie;
2361   proto_tree *ie_tree;
2362   guint8 ie_type, ie_len;
2363
2364   offset = 0;
2365
2366   ti = proto_tree_add_item_hidden(tree, proto_qsig, tvb, offset, -1, FALSE);
2367
2368   ie_type = tvb_get_guint8(tvb, offset);
2369   ie_len = tvb_get_guint8(tvb, offset + 1);
2370
2371   ti_ie = proto_tree_add_text(tree, tvb, offset, -1, "%s",
2372             val_to_str(ie_type, VALS(qsig_str_ie_type[codeset]), "unknown (0x%02X)"));
2373   ie_tree = proto_item_add_subtree(ti_ie, ett_qsig_ie); 
2374   proto_tree_add_item(ie_tree, *hf_qsig_ie_type_arr[codeset], tvb, offset, 1, FALSE);
2375   proto_tree_add_item_hidden(ie_tree, hf_qsig_ie_type, tvb, offset, 1, FALSE);
2376   proto_tree_add_item(ie_tree, hf_qsig_ie_len, tvb, offset + 1, 1, FALSE);
2377   offset += 2;
2378   if (tvb_length_remaining(tvb, offset) <= 0)
2379     return;
2380   switch ((codeset << 8) | ie_type) {
2381     case CS4 | QSIG_IE_TRANSIT_COUNTER :
2382       dissect_qsig_transit_counter_ie(tvb, offset, pinfo, ie_tree, ie_len);
2383       break;
2384     case CS5 | QSIG_IE_PARTY_CATEGORY :
2385       dissect_qsig_party_category_ie(tvb, offset, pinfo, ie_tree, ie_len);
2386       break;
2387     default:
2388       if (ie_len > 0) {
2389         if (tree) proto_tree_add_item(ie_tree, hf_qsig_ie_data, tvb, offset, ie_len, FALSE);
2390       }
2391   }
2392 }
2393 /*--- dissect_qsig_ie_cs4 ---------------------------------------------------*/
2394 static void
2395 dissect_qsig_ie_cs4(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2396   dissect_qsig_ie(tvb, pinfo, tree, 4);
2397 }
2398 /*--- dissect_qsig_ie_cs5 ---------------------------------------------------*/
2399 static void
2400 dissect_qsig_ie_cs5(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2401   dissect_qsig_ie(tvb, pinfo, tree, 5);
2402 }
2403
2404 /*--- proto_register_qsig ---------------------------------------------------*/
2405 void proto_register_qsig(void) {
2406
2407   /* List of fields */
2408   static hf_register_info hf[] = {
2409     { &hf_qsig_operation, { "Operation", "qsig.operation",
2410                            FT_UINT8, BASE_DEC, VALS(qsig_str_operation), 0x0,
2411                            "Operation", HFILL }},
2412     { &hf_qsig_service,   { "Service", "qsig.service",
2413                            FT_UINT8, BASE_DEC, VALS(qsig_str_service), 0x0,
2414                            "Supplementary Service", HFILL }},
2415     { &hf_qsig_ie_type, { "Type", "qsig.ie.type",
2416                           FT_UINT8, BASE_HEX, NULL, 0x0,
2417                           "Information Element Type", HFILL }},
2418     { &hf_qsig_ie_type_cs4, { "Type", "qsig.ie.type.cs4",
2419                           FT_UINT8, BASE_HEX, VALS(qsig_str_ie_type_cs4), 0x0,
2420                           "Information Element Type (Codeset 4)", HFILL }},
2421     { &hf_qsig_ie_type_cs5, { "Type", "qsig.ie.type.cs5",
2422                           FT_UINT8, BASE_HEX, VALS(qsig_str_ie_type_cs5), 0x0,
2423                           "Information Element Type (Codeset 5)", HFILL }},
2424     { &hf_qsig_ie_len,  { "Length", "qsig.ie.len",
2425                           FT_UINT8, BASE_DEC, NULL, 0x0,
2426                           "Information Element Length", HFILL }},
2427     { &hf_qsig_ie_data, { "Data", "qsig.ie.data",
2428                           FT_BYTES, BASE_HEX, NULL, 0x0,
2429                           "Data", HFILL }},
2430     { &hf_qsig_tc,      { "Transit count", "qsig.tc",
2431                           FT_UINT8, BASE_DEC, NULL, 0x1F,
2432                           "Transit count", HFILL }},
2433     { &hf_qsig_pc,      { "Party category", "qsig.pc",
2434                           FT_UINT8, BASE_HEX, VALS(qsig_str_pc), 0x07,
2435                           "Party category", HFILL }},
2436
2437 /*--- Included file: packet-qsig-hfarr.c ---*/
2438 #line 1 "packet-qsig-hfarr.c"
2439     { &hf_qsig_NameArg_PDU,
2440       { "NameArg", "qsig.NameArg",
2441         FT_UINT32, BASE_DEC, VALS(qsig_NameArg_vals), 0,
2442         "qsig.NameArg", HFILL }},
2443     { &hf_qsig_ActivateDivArg_PDU,
2444       { "ActivateDivArg", "qsig.ActivateDivArg",
2445         FT_NONE, BASE_NONE, NULL, 0,
2446         "qsig.ActivateDivArg", HFILL }},
2447     { &hf_qsig_ActivateDivRes_PDU,
2448       { "ActivateDivRes", "qsig.ActivateDivRes",
2449         FT_UINT32, BASE_DEC, VALS(qsig_ActivateDivRes_vals), 0,
2450         "qsig.ActivateDivRes", HFILL }},
2451     { &hf_qsig_DeactivateDivArg_PDU,
2452       { "DeactivateDivArg", "qsig.DeactivateDivArg",
2453         FT_NONE, BASE_NONE, NULL, 0,
2454         "qsig.DeactivateDivArg", HFILL }},
2455     { &hf_qsig_DeactivateDivRes_PDU,
2456       { "DeactivateDivRes", "qsig.DeactivateDivRes",
2457         FT_UINT32, BASE_DEC, VALS(qsig_DeactivateDivRes_vals), 0,
2458         "qsig.DeactivateDivRes", HFILL }},
2459     { &hf_qsig_InterrDivArg_PDU,
2460       { "InterrDivArg", "qsig.InterrDivArg",
2461         FT_NONE, BASE_NONE, NULL, 0,
2462         "qsig.InterrDivArg", HFILL }},
2463     { &hf_qsig_ChkResArg_PDU,
2464       { "ChkResArg", "qsig.ChkResArg",
2465         FT_NONE, BASE_NONE, NULL, 0,
2466         "qsig.ChkResArg", HFILL }},
2467     { &hf_qsig_ChkResRes_PDU,
2468       { "ChkResRes", "qsig.ChkResRes",
2469         FT_UINT32, BASE_DEC, VALS(qsig_ChkResRes_vals), 0,
2470         "qsig.ChkResRes", HFILL }},
2471     { &hf_qsig_CallRrArg_PDU,
2472       { "CallRrArg", "qsig.CallRrArg",
2473         FT_NONE, BASE_NONE, NULL, 0,
2474         "qsig.CallRrArg", HFILL }},
2475     { &hf_qsig_CallRrRes_PDU,
2476       { "CallRrRes", "qsig.CallRrRes",
2477         FT_UINT32, BASE_DEC, VALS(qsig_CallRrRes_vals), 0,
2478         "qsig.CallRrRes", HFILL }},
2479     { &hf_qsig_DivLegInf1Arg_PDU,
2480       { "DivLegInf1Arg", "qsig.DivLegInf1Arg",
2481         FT_NONE, BASE_NONE, NULL, 0,
2482         "qsig.DivLegInf1Arg", HFILL }},
2483     { &hf_qsig_DivLegInf2Arg_PDU,
2484       { "DivLegInf2Arg", "qsig.DivLegInf2Arg",
2485         FT_NONE, BASE_NONE, NULL, 0,
2486         "qsig.DivLegInf2Arg", HFILL }},
2487     { &hf_qsig_DivLegInf3Arg_PDU,
2488       { "DivLegInf3Arg", "qsig.DivLegInf3Arg",
2489         FT_NONE, BASE_NONE, NULL, 0,
2490         "qsig.DivLegInf3Arg", HFILL }},
2491     { &hf_qsig_DivLegFailArg_PDU,
2492       { "DivLegFailArg", "qsig.DivLegFailArg",
2493         FT_UINT32, BASE_DEC, VALS(qsig_DivLegFailArg_vals), 0,
2494         "qsig.DivLegFailArg", HFILL }},
2495     { &hf_qsig_IntResultList_PDU,
2496       { "IntResultList", "qsig.IntResultList",
2497         FT_UINT32, BASE_DEC, NULL, 0,
2498         "qsig.IntResultList", HFILL }},
2499     { &hf_qsig_extensionId,
2500       { "extensionId", "qsig.extensionId",
2501         FT_OID, BASE_NONE, NULL, 0,
2502         "qsig.OBJECT_IDENTIFIER", HFILL }},
2503     { &hf_qsig_extensionArgument,
2504       { "extensionArgument", "qsig.extensionArgument",
2505         FT_NONE, BASE_NONE, NULL, 0,
2506         "qsig.T_extensionArgument", HFILL }},
2507     { &hf_qsig_presentationAllowedAddressS,
2508       { "presentationAllowedAddressS", "qsig.presentationAllowedAddressS",
2509         FT_NONE, BASE_NONE, NULL, 0,
2510         "qsig.AddressScreened", HFILL }},
2511     { &hf_qsig_presentationRestricted,
2512       { "presentationRestricted", "qsig.presentationRestricted",
2513         FT_NONE, BASE_NONE, NULL, 0,
2514         "qsig.NULL", HFILL }},
2515     { &hf_qsig_numberNotAvailableDueToInterworking,
2516       { "numberNotAvailableDueToInterworking", "qsig.numberNotAvailableDueToInterworking",
2517         FT_NONE, BASE_NONE, NULL, 0,
2518         "qsig.NULL", HFILL }},
2519     { &hf_qsig_presentationRestrictedAddressS,
2520       { "presentationRestrictedAddressS", "qsig.presentationRestrictedAddressS",
2521         FT_NONE, BASE_NONE, NULL, 0,
2522         "qsig.AddressScreened", HFILL }},
2523     { &hf_qsig_presentationAllowedAddressU,
2524       { "presentationAllowedAddressU", "qsig.presentationAllowedAddressU",
2525         FT_NONE, BASE_NONE, NULL, 0,
2526         "qsig.Address", HFILL }},
2527     { &hf_qsig_presentationRestrictedAddressU,
2528       { "presentationRestrictedAddressU", "qsig.presentationRestrictedAddressU",
2529         FT_NONE, BASE_NONE, NULL, 0,
2530         "qsig.Address", HFILL }},
2531     { &hf_qsig_presentationAllowedAddressNS,
2532       { "presentationAllowedAddressNS", "qsig.presentationAllowedAddressNS",
2533         FT_NONE, BASE_NONE, NULL, 0,
2534         "qsig.NumberScreened", HFILL }},
2535     { &hf_qsig_presentationRestrictedAddressNS,
2536       { "presentationRestrictedAddressNS", "qsig.presentationRestrictedAddressNS",
2537         FT_NONE, BASE_NONE, NULL, 0,
2538         "qsig.NumberScreened", HFILL }},
2539     { &hf_qsig_presentationAllowedAddressNU,
2540       { "presentationAllowedAddressNU", "qsig.presentationAllowedAddressNU",
2541         FT_UINT32, BASE_DEC, VALS(qsig_PartyNumber_vals), 0,
2542         "qsig.PartyNumber", HFILL }},
2543     { &hf_qsig_presentationRestrictedAddressNU,
2544       { "presentationRestrictedAddressNU", "qsig.presentationRestrictedAddressNU",
2545         FT_UINT32, BASE_DEC, VALS(qsig_PartyNumber_vals), 0,
2546         "qsig.PartyNumber", HFILL }},
2547     { &hf_qsig_partyNumber,
2548       { "partyNumber", "qsig.partyNumber",
2549         FT_UINT32, BASE_DEC, VALS(qsig_PartyNumber_vals), 0,
2550         "qsig.PartyNumber", HFILL }},
2551     { &hf_qsig_screeningIndicator,
2552       { "screeningIndicator", "qsig.screeningIndicator",
2553         FT_UINT32, BASE_DEC, VALS(qsig_ScreeningIndicator_vals), 0,
2554         "qsig.ScreeningIndicator", HFILL }},
2555     { &hf_qsig_partySubaddress,
2556       { "partySubaddress", "qsig.partySubaddress",
2557         FT_UINT32, BASE_DEC, VALS(qsig_PartySubaddress_vals), 0,
2558         "qsig.PartySubaddress", HFILL }},
2559     { &hf_qsig_unknownPartyNumber,
2560       { "unknownPartyNumber", "qsig.unknownPartyNumber",
2561         FT_STRING, BASE_NONE, NULL, 0,
2562         "qsig.NumberDigits", HFILL }},
2563     { &hf_qsig_publicPartyNumber,
2564       { "publicPartyNumber", "qsig.publicPartyNumber",
2565         FT_NONE, BASE_NONE, NULL, 0,
2566         "qsig.PublicPartyNumber", HFILL }},
2567     { &hf_qsig_dataPartyNumber,
2568       { "dataPartyNumber", "qsig.dataPartyNumber",
2569         FT_STRING, BASE_NONE, NULL, 0,
2570         "qsig.NumberDigits", HFILL }},
2571     { &hf_qsig_telexPartyNumber,
2572       { "telexPartyNumber", "qsig.telexPartyNumber",
2573         FT_STRING, BASE_NONE, NULL, 0,
2574         "qsig.NumberDigits", HFILL }},
2575     { &hf_qsig_privatePartyNumber,
2576       { "privatePartyNumber", "qsig.privatePartyNumber",
2577         FT_NONE, BASE_NONE, NULL, 0,
2578         "qsig.PrivatePartyNumber", HFILL }},
2579     { &hf_qsig_nationalStandardPartyNumber,
2580       { "nationalStandardPartyNumber", "qsig.nationalStandardPartyNumber",
2581         FT_STRING, BASE_NONE, NULL, 0,
2582         "qsig.NumberDigits", HFILL }},
2583     { &hf_qsig_publicTypeOfNumber,
2584       { "publicTypeOfNumber", "qsig.publicTypeOfNumber",
2585         FT_UINT32, BASE_DEC, VALS(qsig_PublicTypeOfNumber_vals), 0,
2586         "qsig.PublicTypeOfNumber", HFILL }},
2587     { &hf_qsig_publicNumberDigits,
2588       { "publicNumberDigits", "qsig.publicNumberDigits",
2589         FT_STRING, BASE_NONE, NULL, 0,
2590         "qsig.NumberDigits", HFILL }},
2591     { &hf_qsig_privateTypeOfNumber,
2592       { "privateTypeOfNumber", "qsig.privateTypeOfNumber",
2593         FT_UINT32, BASE_DEC, VALS(qsig_PrivateTypeOfNumber_vals), 0,
2594         "qsig.PrivateTypeOfNumber", HFILL }},
2595     { &hf_qsig_privateNumberDigits,
2596       { "privateNumberDigits", "qsig.privateNumberDigits",
2597         FT_STRING, BASE_NONE, NULL, 0,
2598         "qsig.NumberDigits", HFILL }},
2599     { &hf_qsig_userSpecifiedSubaddress,
2600       { "userSpecifiedSubaddress", "qsig.userSpecifiedSubaddress",
2601         FT_NONE, BASE_NONE, NULL, 0,
2602         "qsig.UserSpecifiedSubaddress", HFILL }},
2603     { &hf_qsig_nSAPSubaddress,
2604       { "nSAPSubaddress", "qsig.nSAPSubaddress",
2605         FT_BYTES, BASE_HEX, NULL, 0,
2606         "qsig.NSAPSubaddress", HFILL }},
2607     { &hf_qsig_subaddressInformation,
2608       { "subaddressInformation", "qsig.subaddressInformation",
2609         FT_BYTES, BASE_HEX, NULL, 0,
2610         "qsig.SubaddressInformation", HFILL }},
2611     { &hf_qsig_oddCountIndicator,
2612       { "oddCountIndicator", "qsig.oddCountIndicator",
2613         FT_BOOLEAN, 8, NULL, 0,
2614         "qsig.BOOLEAN", HFILL }},
2615     { &hf_qsig_name,
2616       { "name", "qsig.name",
2617         FT_UINT32, BASE_DEC, VALS(qsig_Name_vals), 0,
2618         "qsig.Name", HFILL }},
2619     { &hf_qsig_nameSequence,
2620       { "nameSequence", "qsig.nameSequence",
2621         FT_NONE, BASE_NONE, NULL, 0,
2622         "qsig.T_nameSequence", HFILL }},
2623     { &hf_qsig_extensionNA,
2624       { "extension", "qsig.extension",
2625         FT_UINT32, BASE_DEC, VALS(qsig_NameExtension_vals), 0,
2626         "qsig.NameExtension", HFILL }},
2627     { &hf_qsig_single,
2628       { "single", "qsig.single",
2629         FT_NONE, BASE_NONE, NULL, 0,
2630         "qsig.Extension", HFILL }},
2631     { &hf_qsig_multiple,
2632       { "multiple", "qsig.multiple",
2633         FT_UINT32, BASE_DEC, NULL, 0,
2634         "qsig.SEQUENCE_OF_Extension", HFILL }},
2635     { &hf_qsig_multiple_item,
2636       { "Item", "qsig.multiple_item",
2637         FT_NONE, BASE_NONE, NULL, 0,
2638         "qsig.Extension", HFILL }},
2639     { &hf_qsig_namePresentationAllowed,
2640       { "namePresentationAllowed", "qsig.namePresentationAllowed",
2641         FT_UINT32, BASE_DEC, VALS(qsig_NamePresentationAllowed_vals), 0,
2642         "qsig.NamePresentationAllowed", HFILL }},
2643     { &hf_qsig_namePresentationRestricted,
2644       { "namePresentationRestricted", "qsig.namePresentationRestricted",
2645         FT_UINT32, BASE_DEC, VALS(qsig_NamePresentationRestricted_vals), 0,
2646         "qsig.NamePresentationRestricted", HFILL }},
2647     { &hf_qsig_nameNotAvailable,
2648       { "nameNotAvailable", "qsig.nameNotAvailable",
2649         FT_NONE, BASE_NONE, NULL, 0,
2650         "qsig.NameNotAvailable", HFILL }},
2651     { &hf_qsig_namePresentationAllowedSimple,
2652       { "namePresentationAllowedSimple", "qsig.namePresentationAllowedSimple",
2653         FT_STRING, BASE_NONE, NULL, 0,
2654         "qsig.NameData", HFILL }},
2655     { &hf_qsig_namePresentationAllowedExtended,
2656       { "namePresentationAllowedExtended", "qsig.namePresentationAllowedExtended",
2657         FT_NONE, BASE_NONE, NULL, 0,
2658         "qsig.NameSet", HFILL }},
2659     { &hf_qsig_namePresentationRestrictedSimple,
2660       { "namePresentationRestrictedSimple", "qsig.namePresentationRestrictedSimple",
2661         FT_STRING, BASE_NONE, NULL, 0,
2662         "qsig.NameData", HFILL }},
2663     { &hf_qsig_namePresentationRestrictedExtended,
2664       { "namePresentationRestrictedExtended", "qsig.namePresentationRestrictedExtended",
2665         FT_NONE, BASE_NONE, NULL, 0,
2666         "qsig.NameSet", HFILL }},
2667     { &hf_qsig_namePresentationRestrictedNull,
2668       { "namePresentationRestrictedNull", "qsig.namePresentationRestrictedNull",
2669         FT_NONE, BASE_NONE, NULL, 0,
2670         "qsig.NULL", HFILL }},
2671     { &hf_qsig_nameData,
2672       { "nameData", "qsig.nameData",
2673         FT_STRING, BASE_NONE, NULL, 0,
2674         "qsig.NameData", HFILL }},
2675     { &hf_qsig_characterSet,
2676       { "characterSet", "qsig.characterSet",
2677         FT_UINT32, BASE_DEC, VALS(qsig_CharacterSet_vals), 0,
2678         "qsig.CharacterSet", HFILL }},
2679     { &hf_qsig_procedure,
2680       { "procedure", "qsig.procedure",
2681         FT_UINT32, BASE_DEC, VALS(qsig_Procedure_vals), 0,
2682         "qsig.Procedure", HFILL }},
2683     { &hf_qsig_basicService,
2684       { "basicService", "qsig.basicService",
2685         FT_UINT32, BASE_DEC, VALS(qsig_BasicService_vals), 0,
2686         "qsig.BasicService", HFILL }},
2687     { &hf_qsig_divertedToAddress,
2688       { "divertedToAddress", "qsig.divertedToAddress",
2689         FT_NONE, BASE_NONE, NULL, 0,
2690         "qsig.Address", HFILL }},
2691     { &hf_qsig_servedUserNr,
2692       { "servedUserNr", "qsig.servedUserNr",
2693         FT_UINT32, BASE_DEC, VALS(qsig_PartyNumber_vals), 0,
2694         "qsig.PartyNumber", HFILL }},
2695     { &hf_qsig_activatingUserNr,
2696       { "activatingUserNr", "qsig.activatingUserNr",
2697         FT_UINT32, BASE_DEC, VALS(qsig_PartyNumber_vals), 0,
2698         "qsig.PartyNumber", HFILL }},
2699     { &hf_qsig_extensionAD,
2700       { "extension", "qsig.extension",
2701         FT_UINT32, BASE_DEC, VALS(qsig_ADExtension_vals), 0,
2702         "qsig.ADExtension", HFILL }},
2703     { &hf_qsig_null,
2704       { "null", "qsig.null",
2705         FT_NONE, BASE_NONE, NULL, 0,
2706         "qsig.NULL", HFILL }},
2707     { &hf_qsig_deactivatingUserNr,
2708       { "deactivatingUserNr", "qsig.deactivatingUserNr",
2709         FT_UINT32, BASE_DEC, VALS(qsig_PartyNumber_vals), 0,
2710         "qsig.PartyNumber", HFILL }},
2711     { &hf_qsig_extensionDD,
2712       { "extension", "qsig.extension",
2713         FT_UINT32, BASE_DEC, VALS(qsig_DDExtension_vals), 0,
2714         "qsig.DDExtension", HFILL }},
2715     { &hf_qsig_interrogatingUserNr,
2716       { "interrogatingUserNr", "qsig.interrogatingUserNr",
2717         FT_UINT32, BASE_DEC, VALS(qsig_PartyNumber_vals), 0,
2718         "qsig.PartyNumber", HFILL }},
2719     { &hf_qsig_extensionID,
2720       { "extension", "qsig.extension",
2721         FT_UINT32, BASE_DEC, VALS(qsig_IDExtension_vals), 0,
2722         "qsig.IDExtension", HFILL }},
2723     { &hf_qsig_divertedToNr,
2724       { "divertedToNr", "qsig.divertedToNr",
2725         FT_UINT32, BASE_DEC, VALS(qsig_PartyNumber_vals), 0,
2726         "qsig.PartyNumber", HFILL }},
2727     { &hf_qsig_extensionCHR,
2728       { "extension", "qsig.extension",
2729         FT_UINT32, BASE_DEC, VALS(qsig_CHRExtension_vals), 0,
2730         "qsig.CHRExtension", HFILL }},
2731     { &hf_qsig_rerouteingReason,
2732       { "rerouteingReason", "qsig.rerouteingReason",
2733         FT_UINT32, BASE_DEC, VALS(qsig_DiversionReason_vals), 0,
2734         "qsig.DiversionReason", HFILL }},
2735     { &hf_qsig_originalRerouteingReason,
2736       { "originalRerouteingReason", "qsig.originalRerouteingReason",
2737         FT_UINT32, BASE_DEC, VALS(qsig_DiversionReason_vals), 0,
2738         "qsig.DiversionReason", HFILL }},
2739     { &hf_qsig_calledAddress,
2740       { "calledAddress", "qsig.calledAddress",
2741         FT_NONE, BASE_NONE, NULL, 0,
2742         "qsig.Address", HFILL }},
2743     { &hf_qsig_diversionCounter,
2744       { "diversionCounter", "qsig.diversionCounter",
2745         FT_UINT32, BASE_DEC, NULL, 0,
2746         "qsig.INTEGER_1_15", HFILL }},
2747     { &hf_qsig_pSS1InfoElement,
2748       { "pSS1InfoElement", "qsig.pSS1InfoElement",
2749         FT_BYTES, BASE_HEX, NULL, 0,
2750         "qsig.PSS1InformationElement", HFILL }},
2751     { &hf_qsig_lastRerouteingNr,
2752       { "lastRerouteingNr", "qsig.lastRerouteingNr",
2753         FT_UINT32, BASE_DEC, VALS(qsig_PresentedNumberUnscreened_vals), 0,
2754         "qsig.PresentedNumberUnscreened", HFILL }},
2755     { &hf_qsig_subscriptionOption,
2756       { "subscriptionOption", "qsig.subscriptionOption",
2757         FT_UINT32, BASE_DEC, VALS(qsig_SubscriptionOption_vals), 0,
2758         "qsig.SubscriptionOption", HFILL }},
2759     { &hf_qsig_callingPartySubaddress,
2760       { "callingPartySubaddress", "qsig.callingPartySubaddress",
2761         FT_UINT32, BASE_DEC, VALS(qsig_PartySubaddress_vals), 0,
2762         "qsig.PartySubaddress", HFILL }},
2763     { &hf_qsig_callingNumber,
2764       { "callingNumber", "qsig.callingNumber",
2765         FT_UINT32, BASE_DEC, VALS(qsig_PresentedNumberScreened_vals), 0,
2766         "qsig.PresentedNumberScreened", HFILL }},
2767     { &hf_qsig_callingName,
2768       { "callingName", "qsig.callingName",
2769         FT_UINT32, BASE_DEC, VALS(qsig_Name_vals), 0,
2770         "qsig.Name", HFILL }},
2771     { &hf_qsig_originalCalledNr,
2772       { "originalCalledNr", "qsig.originalCalledNr",
2773         FT_UINT32, BASE_DEC, VALS(qsig_PresentedNumberUnscreened_vals), 0,
2774         "qsig.PresentedNumberUnscreened", HFILL }},
2775     { &hf_qsig_redirectingName,
2776       { "redirectingName", "qsig.redirectingName",
2777         FT_UINT32, BASE_DEC, VALS(qsig_Name_vals), 0,
2778         "qsig.Name", HFILL }},
2779     { &hf_qsig_originalCalledName,
2780       { "originalCalledName", "qsig.originalCalledName",
2781         FT_UINT32, BASE_DEC, VALS(qsig_Name_vals), 0,
2782         "qsig.Name", HFILL }},
2783     { &hf_qsig_extensionCRR,
2784       { "extension", "qsig.extension",
2785         FT_UINT32, BASE_DEC, VALS(qsig_CRRExtension_vals), 0,
2786         "qsig.CRRExtension", HFILL }},
2787     { &hf_qsig_diversionReason,
2788       { "diversionReason", "qsig.diversionReason",
2789         FT_UINT32, BASE_DEC, VALS(qsig_DiversionReason_vals), 0,
2790         "qsig.DiversionReason", HFILL }},
2791     { &hf_qsig_nominatedNr,
2792       { "nominatedNr", "qsig.nominatedNr",
2793         FT_UINT32, BASE_DEC, VALS(qsig_PartyNumber_vals), 0,
2794         "qsig.PartyNumber", HFILL }},
2795     { &hf_qsig_extensionDLI1,
2796       { "extension", "qsig.extension",
2797         FT_UINT32, BASE_DEC, VALS(qsig_DLI1Extension_vals), 0,
2798         "qsig.DLI1Extension", HFILL }},
2799     { &hf_qsig_originalDiversionReason,
2800       { "originalDiversionReason", "qsig.originalDiversionReason",
2801         FT_UINT32, BASE_DEC, VALS(qsig_DiversionReason_vals), 0,
2802         "qsig.DiversionReason", HFILL }},
2803     { &hf_qsig_divertingNr,
2804       { "divertingNr", "qsig.divertingNr",
2805         FT_UINT32, BASE_DEC, VALS(qsig_PresentedNumberUnscreened_vals), 0,
2806         "qsig.PresentedNumberUnscreened", HFILL }},
2807     { &hf_qsig_extensionDLI2,
2808       { "extension", "qsig.extension",
2809         FT_UINT32, BASE_DEC, VALS(qsig_DLI2Extension_vals), 0,
2810         "qsig.DLI2Extension", HFILL }},
2811     { &hf_qsig_presentationAllowedIndicator,
2812       { "presentationAllowedIndicator", "qsig.presentationAllowedIndicator",
2813         FT_BOOLEAN, 8, NULL, 0,
2814         "qsig.PresentationAllowedIndicator", HFILL }},
2815     { &hf_qsig_redirectionName,
2816       { "redirectionName", "qsig.redirectionName",
2817         FT_UINT32, BASE_DEC, VALS(qsig_Name_vals), 0,
2818         "qsig.Name", HFILL }},
2819     { &hf_qsig_extensionDLI3,
2820       { "extension", "qsig.extension",
2821         FT_UINT32, BASE_DEC, VALS(qsig_DLI3Extension_vals), 0,
2822         "qsig.DLI3Extension", HFILL }},
2823     { &hf_qsig_IntResultList_item,
2824       { "Item", "qsig.IntResultList_item",
2825         FT_NONE, BASE_NONE, NULL, 0,
2826         "qsig.IntResult", HFILL }},
2827     { &hf_qsig_remoteEnabled,
2828       { "remoteEnabled", "qsig.remoteEnabled",
2829         FT_BOOLEAN, 8, NULL, 0,
2830         "qsig.BOOLEAN", HFILL }},
2831     { &hf_qsig_extensionIR,
2832       { "extension", "qsig.extension",
2833         FT_UINT32, BASE_DEC, VALS(qsig_IRExtension_vals), 0,
2834         "qsig.IRExtension", HFILL }},
2835
2836 /*--- End of included file: packet-qsig-hfarr.c ---*/
2837 #line 765 "packet-qsig-template.c"
2838   };
2839
2840   /* List of subtrees */
2841   static gint *ett[] = {
2842     &ett_qsig,
2843     &ett_qsig_ie,
2844
2845 /*--- Included file: packet-qsig-ettarr.c ---*/
2846 #line 1 "packet-qsig-ettarr.c"
2847     &ett_qsig_Extension,
2848     &ett_qsig_PresentedAddressScreened,
2849     &ett_qsig_PresentedAddressUnscreened,
2850     &ett_qsig_PresentedNumberScreened,
2851     &ett_qsig_PresentedNumberUnscreened,
2852     &ett_qsig_AddressScreened,
2853     &ett_qsig_NumberScreened,
2854     &ett_qsig_Address,
2855     &ett_qsig_PartyNumber,
2856     &ett_qsig_PublicPartyNumber,
2857     &ett_qsig_PrivatePartyNumber,
2858     &ett_qsig_PartySubaddress,
2859     &ett_qsig_UserSpecifiedSubaddress,
2860     &ett_qsig_NameArg,
2861     &ett_qsig_T_nameSequence,
2862     &ett_qsig_NameExtension,
2863     &ett_qsig_SEQUENCE_OF_Extension,
2864     &ett_qsig_Name,
2865     &ett_qsig_NamePresentationAllowed,
2866     &ett_qsig_NamePresentationRestricted,
2867     &ett_qsig_NameSet,
2868     &ett_qsig_ActivateDivArg,
2869     &ett_qsig_ADExtension,
2870     &ett_qsig_ActivateDivRes,
2871     &ett_qsig_DeactivateDivArg,
2872     &ett_qsig_DDExtension,
2873     &ett_qsig_DeactivateDivRes,
2874     &ett_qsig_InterrDivArg,
2875     &ett_qsig_IDExtension,
2876     &ett_qsig_ChkResArg,
2877     &ett_qsig_CHRExtension,
2878     &ett_qsig_ChkResRes,
2879     &ett_qsig_CallRrArg,
2880     &ett_qsig_CRRExtension,
2881     &ett_qsig_CallRrRes,
2882     &ett_qsig_DivLegInf1Arg,
2883     &ett_qsig_DLI1Extension,
2884     &ett_qsig_DivLegInf2Arg,
2885     &ett_qsig_DLI2Extension,
2886     &ett_qsig_DivLegInf3Arg,
2887     &ett_qsig_DLI3Extension,
2888     &ett_qsig_DivLegFailArg,
2889     &ett_qsig_IntResultList,
2890     &ett_qsig_IntResult,
2891     &ett_qsig_IRExtension,
2892
2893 /*--- End of included file: packet-qsig-ettarr.c ---*/
2894 #line 772 "packet-qsig-template.c"
2895   };
2896
2897   /* Register protocol and dissector */
2898   proto_qsig = proto_register_protocol(PNAME, PSNAME, PFNAME);
2899
2900   /* Register fields and subtrees */
2901   proto_register_field_array(proto_qsig, hf, array_length(hf));
2902   proto_register_subtree_array(ett, array_length(ett));
2903
2904 }
2905
2906
2907 /*--- proto_reg_handoff_qsig ------------------------------------------------*/
2908 void proto_reg_handoff_qsig(void) {
2909   guint32 op;
2910   dissector_handle_t qsig_op_handle;
2911   dissector_handle_t qsig_ie_handle;
2912
2913   data_handle = find_dissector("data");
2914
2915   if (find_dissector_table("q932.ros.local.arg")) {
2916     for (op=0; op<array_length(qsig_tab); op++) {
2917       if (qsig_tab[op].arg_dissector) {
2918         qsig_op_handle = create_dissector_handle(qsig_tab[op].arg_dissector, proto_qsig);
2919         dissector_add("q932.ros.local.arg", op, qsig_op_handle);
2920       }
2921       if (qsig_tab[op].res_dissector) {
2922         qsig_op_handle = create_dissector_handle(qsig_tab[op].res_dissector, proto_qsig);
2923         dissector_add("q932.ros.local.res", op, qsig_op_handle);
2924       }
2925     }
2926   }
2927
2928   qsig_ie_handle = create_dissector_handle(dissect_qsig_ie_cs4, proto_qsig);
2929   /* QSIG-TC - Transit counter */
2930   dissector_add("q931.ie", CS4 | QSIG_IE_TRANSIT_COUNTER, qsig_ie_handle);
2931
2932   qsig_ie_handle = create_dissector_handle(dissect_qsig_ie_cs5, proto_qsig);
2933   /* SSIG-BC - Party category */
2934   dissector_add("q931.ie", CS5 | QSIG_IE_PARTY_CATEGORY, qsig_ie_handle);
2935
2936 }
2937
2938 /*---------------------------------------------------------------------------*/