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