Coverage Report

Created: 2026-06-30 07:22

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-h248.c
Line
Count
Source
1
/* Do not modify this file. Changes will be overwritten.                      */
2
/* Generated automatically by the ASN.1 to Wireshark dissector compiler       */
3
/* packet-h248.c                                                              */
4
/* asn2wrs.py -b -q -L -p h248 -c ./h248.cnf -s ./packet-h248-template -D . -O ../.. h248v3.asn h248v1support.asn */
5
6
/* packet-h248.c
7
 * Routines for H.248/MEGACO packet dissection
8
 *
9
 * Ronnie Sahlberg 2004
10
 *
11
 * Luis Ontanon 2005 - Context and Transaction Tracing
12
 *
13
 * Wireshark - Network traffic analyzer
14
 * By Gerald Combs <gerald@wireshark.org>
15
 * Copyright 1998 Gerald Combs
16
 *
17
 * SPDX-License-Identifier: GPL-2.0-or-later
18
 */
19
20
#include "config.h"
21
22
#include <epan/packet.h>
23
#include <epan/exceptions.h>
24
#include <epan/tap.h>
25
#include <epan/asn1.h>
26
#include <epan/proto_data.h>
27
#include <epan/prefs.h>
28
#include <epan/exported_pdu.h>
29
#include <epan/address_types.h>
30
#include <wsutil/array.h>
31
#include "packet-alcap.h"
32
#include "packet-ber.h"
33
#include "packet-tpkt.h"
34
#include "packet-mtp3.h"
35
#include "packet-h248.h"
36
37
void proto_register_h248(void);
38
39
/* Initialize the protocol and registered fields */
40
static int proto_h248;
41
static int hf_248_magic_num;
42
static int hf_h248_mtpaddress_ni;
43
static int hf_h248_mtpaddress_pc;
44
static int hf_h248_pkg_name;
45
static int hf_248_pkg_param;
46
static int hf_h248_event_name;
47
static int hf_h248_signal_name;
48
static int hf_h248_signal_code;
49
static int hf_h248_event_code;
50
static int hf_h248_pkg_bcp_BNCChar_PDU;
51
52
53
54
static int hf_h248_context_id;
55
static int hf_h248_term_wild_type;
56
static int hf_h248_term_wild_level;
57
static int hf_h248_term_wild_position;
58
59
static int hf_h248_no_pkg;
60
static int hf_h248_no_sig;
61
static int hf_h248_no_evt;
62
static int hf_h248_param;
63
64
static int hf_h248_serviceChangeReasonStr;
65
static int hf_h248_transactionId64;
66
static int hf_h248_context_id64;
67
68
/* h248v1 support */
69
static int hf_h248_auditValueReplyV1;
70
71
static int hf_h248_authHeader;                    /* AuthenticationHeader */
72
static int hf_h248_mess;                          /* Message */
73
static int hf_h248_secParmIndex;                  /* SecurityParmIndex */
74
static int hf_h248_seqNum;                        /* SequenceNum */
75
static int hf_h248_ad;                            /* AuthData */
76
static int hf_h248_version;                       /* T_version */
77
static int hf_h248_mId;                           /* MId */
78
static int hf_h248_messageBody;                   /* T_messageBody */
79
static int hf_h248_messageError;                  /* ErrorDescriptor */
80
static int hf_h248_transactions;                  /* SEQUENCE_OF_Transaction */
81
static int hf_h248_transactions_item;             /* Transaction */
82
static int hf_h248_ip4Address;                    /* IP4Address */
83
static int hf_h248_ip6Address;                    /* IP6Address */
84
static int hf_h248_domainName;                    /* DomainName */
85
static int hf_h248_deviceName;                    /* PathName */
86
static int hf_h248_mtpAddress;                    /* MtpAddress */
87
static int hf_h248_domName;                       /* IA5String */
88
static int hf_h248_portNumber;                    /* INTEGER_0_65535 */
89
static int hf_h248_iP4Address;                    /* OCTET_STRING_SIZE_4 */
90
static int hf_h248_iP6Address;                    /* OCTET_STRING_SIZE_16 */
91
static int hf_h248_transactionRequest;            /* TransactionRequest */
92
static int hf_h248_transactionPending;            /* TransactionPending */
93
static int hf_h248_transactionReply;              /* TransactionReply */
94
static int hf_h248_transactionResponseAck;        /* TransactionResponseAck */
95
static int hf_h248_segmentReply;                  /* SegmentReply */
96
static int hf_h248_transactionId;                 /* T_transactionId */
97
static int hf_h248_actions;                       /* SEQUENCE_OF_ActionRequest */
98
static int hf_h248_actions_item;                  /* ActionRequest */
99
static int hf_h248_tpend_transactionId;           /* T_tpend_transactionId */
100
static int hf_h248_trep_transactionId;            /* T_trep_transactionId */
101
static int hf_h248_immAckRequired;                /* NULL */
102
static int hf_h248_transactionResult;             /* T_transactionResult */
103
static int hf_h248_transactionError;              /* ErrorDescriptor */
104
static int hf_h248_actionReplies;                 /* SEQUENCE_OF_ActionReply */
105
static int hf_h248_actionReplies_item;            /* ActionReply */
106
static int hf_h248_segmentNumber;                 /* SegmentNumber */
107
static int hf_h248_segmentationComplete;          /* NULL */
108
static int hf_h248_seg_rep_transactionId;         /* T_seg_rep_transactionId */
109
static int hf_h248_TransactionResponseAck_item;   /* TransactionAck */
110
static int hf_h248_firstAck;                      /* TransactionId */
111
static int hf_h248_lastAck;                       /* TransactionId */
112
static int hf_h248_errorCode;                     /* T_errorCode */
113
static int hf_h248_errorText;                     /* ErrorText */
114
static int hf_h248_contextId;                     /* ContextId */
115
static int hf_h248_contextRequest;                /* ContextRequest */
116
static int hf_h248_contextAttrAuditReq;           /* T_contextAttrAuditReq */
117
static int hf_h248_commandRequests;               /* SEQUENCE_OF_CommandRequest */
118
static int hf_h248_commandRequests_item;          /* CommandRequest */
119
static int hf_h248_errorDescriptor;               /* ErrorDescriptor */
120
static int hf_h248_contextReply;                  /* ContextRequest */
121
static int hf_h248_commandReply;                  /* SEQUENCE_OF_CommandReply */
122
static int hf_h248_commandReply_item;             /* CommandReply */
123
static int hf_h248_priority;                      /* INTEGER_0_15 */
124
static int hf_h248_emergency;                     /* BOOLEAN */
125
static int hf_h248_topologyReq;                   /* T_topologyReq */
126
static int hf_h248_topologyReq_item;              /* TopologyRequest */
127
static int hf_h248_iepscallind_BOOL;              /* Iepscallind_BOOL */
128
static int hf_h248_contextProp;                   /* SEQUENCE_OF_PropertyParm */
129
static int hf_h248_contextProp_item;              /* PropertyParm */
130
static int hf_h248_contextList;                   /* SEQUENCE_OF_ContextIDinList */
131
static int hf_h248_contextList_item;              /* ContextIDinList */
132
static int hf_h248_topology;                      /* NULL */
133
static int hf_h248_cAAREmergency;                 /* NULL */
134
static int hf_h248_cAARPriority;                  /* NULL */
135
static int hf_h248_iepscallind;                   /* NULL */
136
static int hf_h248_contextPropAud;                /* SEQUENCE_OF_IndAudPropertyParm */
137
static int hf_h248_contextPropAud_item;           /* IndAudPropertyParm */
138
static int hf_h248_selectpriority;                /* INTEGER_0_15 */
139
static int hf_h248_selectemergency;               /* BOOLEAN */
140
static int hf_h248_selectiepscallind;             /* BOOLEAN */
141
static int hf_h248_selectLogic;                   /* SelectLogic */
142
static int hf_h248_andAUDITSelect;                /* NULL */
143
static int hf_h248_orAUDITSelect;                 /* NULL */
144
static int hf_h248_command;                       /* Command */
145
static int hf_h248_optional;                      /* NULL */
146
static int hf_h248_wildcardReturn;                /* NULL */
147
static int hf_h248_addReq;                        /* T_addReq */
148
static int hf_h248_moveReq;                       /* T_moveReq */
149
static int hf_h248_modReq;                        /* T_modReq */
150
static int hf_h248_subtractReq;                   /* T_subtractReq */
151
static int hf_h248_auditCapRequest;               /* T_auditCapRequest */
152
static int hf_h248_auditValueRequest;             /* T_auditValueRequest */
153
static int hf_h248_notifyReq;                     /* T_notifyReq */
154
static int hf_h248_serviceChangeReq;              /* ServiceChangeRequest */
155
static int hf_h248_addReply;                      /* T_addReply */
156
static int hf_h248_moveReply;                     /* T_moveReply */
157
static int hf_h248_modReply;                      /* T_modReply */
158
static int hf_h248_subtractReply;                 /* T_subtractReply */
159
static int hf_h248_auditCapReply;                 /* T_auditCapReply */
160
static int hf_h248_auditValueReply;               /* T_auditValueReply */
161
static int hf_h248_notifyReply;                   /* T_notifyReply */
162
static int hf_h248_serviceChangeReply;            /* ServiceChangeReply */
163
static int hf_h248_terminationFrom;               /* TerminationID */
164
static int hf_h248_terminationTo;                 /* TerminationID */
165
static int hf_h248_topologyDirection;             /* T_topologyDirection */
166
static int hf_h248_streamID;                      /* StreamID */
167
static int hf_h248_topologyDirectionExtension;    /* T_topologyDirectionExtension */
168
static int hf_h248_terminationIDList;             /* TerminationIDList */
169
static int hf_h248_descriptors;                   /* SEQUENCE_OF_AmmDescriptor */
170
static int hf_h248_descriptors_item;              /* AmmDescriptor */
171
static int hf_h248_mediaDescriptor;               /* MediaDescriptor */
172
static int hf_h248_modemDescriptor;               /* ModemDescriptor */
173
static int hf_h248_muxDescriptor;                 /* MuxDescriptor */
174
static int hf_h248_eventsDescriptor;              /* EventsDescriptor */
175
static int hf_h248_eventBufferDescriptor;         /* EventBufferDescriptor */
176
static int hf_h248_signalsDescriptor;             /* SignalsDescriptor */
177
static int hf_h248_digitMapDescriptor;            /* DigitMapDescriptor */
178
static int hf_h248_auditDescriptor;               /* AuditDescriptor */
179
static int hf_h248_aDstatisticsDescriptor;        /* StatisticsDescriptor */
180
static int hf_h248_terminationAudit;              /* TerminationAudit */
181
static int hf_h248_terminationID;                 /* TerminationID */
182
static int hf_h248_contextAuditResult;            /* TerminationIDList */
183
static int hf_h248_error;                         /* ErrorDescriptor */
184
static int hf_h248_auditResult;                   /* AuditResult */
185
static int hf_h248_auditResultTermList;           /* TermListAuditResult */
186
static int hf_h248_terminationAuditResult;        /* TerminationAudit */
187
static int hf_h248_TerminationAudit_item;         /* AuditReturnParameter */
188
static int hf_h248_observedEventsDescriptor;      /* ObservedEventsDescriptor */
189
static int hf_h248_aRPstatisticsDescriptor;       /* StatisticsDescriptor */
190
static int hf_h248_packagesDescriptor;            /* PackagesDescriptor */
191
static int hf_h248_emptyDescriptors;              /* AuditDescriptor */
192
static int hf_h248_auditToken;                    /* T_auditToken */
193
static int hf_h248_auditPropertyToken;            /* SEQUENCE_OF_IndAuditParameter */
194
static int hf_h248_auditPropertyToken_item;       /* IndAuditParameter */
195
static int hf_h248_indaudmediaDescriptor;         /* IndAudMediaDescriptor */
196
static int hf_h248_indaudeventsDescriptor;        /* IndAudEventsDescriptor */
197
static int hf_h248_indaudeventBufferDescriptor;   /* IndAudEventBufferDescriptor */
198
static int hf_h248_indaudsignalsDescriptor;       /* IndAudSignalsDescriptor */
199
static int hf_h248_indauddigitMapDescriptor;      /* IndAudDigitMapDescriptor */
200
static int hf_h248_indaudstatisticsDescriptor;    /* IndAudStatisticsDescriptor */
201
static int hf_h248_indaudpackagesDescriptor;      /* IndAudPackagesDescriptor */
202
static int hf_h248_indAudTerminationStateDescriptor;  /* IndAudTerminationStateDescriptor */
203
static int hf_h248_indAudMediaDescriptorStreams;  /* IndAudMediaDescriptorStreams */
204
static int hf_h248_oneStream;                     /* IndAudStreamParms */
205
static int hf_h248_multiStream;                   /* SEQUENCE_OF_IndAudStreamDescriptor */
206
static int hf_h248_multiStream_item;              /* IndAudStreamDescriptor */
207
static int hf_h248_indAudStreamParms;             /* IndAudStreamParms */
208
static int hf_h248_iASPLocalControlDescriptor;    /* IndAudLocalControlDescriptor */
209
static int hf_h248_iASPLocalDescriptor;           /* IndAudLocalRemoteDescriptor */
210
static int hf_h248_iASPRemoteDescriptor;          /* IndAudLocalRemoteDescriptor */
211
static int hf_h248_statisticsDescriptor;          /* IndAudStatisticsDescriptor */
212
static int hf_h248_iALCDStreamMode;               /* NULL */
213
static int hf_h248_iALCDReserveValue;             /* NULL */
214
static int hf_h248_iALCDReserveGroup;             /* NULL */
215
static int hf_h248_indAudPropertyParms;           /* SEQUENCE_OF_IndAudPropertyParm */
216
static int hf_h248_indAudPropertyParms_item;      /* IndAudPropertyParm */
217
static int hf_h248_streamModeSel;                 /* StreamMode */
218
static int hf_h248_name;                          /* PkgdName */
219
static int hf_h248_propertyParms;                 /* PropertyParm */
220
static int hf_h248_propGroupID;                   /* INTEGER_0_65535 */
221
static int hf_h248_iAPropertyGroup;               /* IndAudPropertyGroup */
222
static int hf_h248_IndAudPropertyGroup_item;      /* IndAudPropertyParm */
223
static int hf_h248_eventBufferControl;            /* NULL */
224
static int hf_h248_iATSDServiceState;             /* NULL */
225
static int hf_h248_serviceStateSel;               /* ServiceState */
226
static int hf_h248_requestID;                     /* RequestID */
227
static int hf_h248_iAEDPkgdName;                  /* PkgdName */
228
static int hf_h248_iAEBDEventName;                /* PkgdName */
229
static int hf_h248_indAudSignal;                  /* IndAudSignal */
230
static int hf_h248_indAudSeqSigList;              /* IndAudSeqSigList */
231
static int hf_h248_id;                            /* INTEGER_0_65535 */
232
static int hf_h248_iASignalList;                  /* IndAudSignal */
233
static int hf_h248_iASignalName;                  /* PkgdName */
234
static int hf_h248_signalRequestID;               /* RequestID */
235
static int hf_h248_digitMapName;                  /* DigitMapName */
236
static int hf_h248_iAStatName;                    /* PkgdName */
237
static int hf_h248_packageName;                   /* Name */
238
static int hf_h248_packageVersion;                /* INTEGER_0_99 */
239
static int hf_h248_requestId;                     /* RequestID */
240
static int hf_h248_observedEventLst;              /* SEQUENCE_OF_ObservedEvent */
241
static int hf_h248_observedEventLst_item;         /* ObservedEvent */
242
static int hf_h248_eventName;                     /* EventName */
243
static int hf_h248_eventParList;                  /* SEQUENCE_OF_EventParameter */
244
static int hf_h248_eventParList_item;             /* EventParameter */
245
static int hf_h248_timeNotation;                  /* TimeNotation */
246
static int hf_h248_eventParameterName;            /* EventParameterName */
247
static int hf_h248_eventParamValue;               /* EventParamValues */
248
static int hf_h248_eventPar_extraInfo;            /* EventPar_extraInfo */
249
static int hf_h248_relation;                      /* Relation */
250
static int hf_h248_range;                         /* BOOLEAN */
251
static int hf_h248_sublist;                       /* BOOLEAN */
252
static int hf_h248_EventParamValues_item;         /* EventParamValue */
253
static int hf_h248_serviceChangeParms;            /* ServiceChangeParm */
254
static int hf_h248_serviceChangeResult;           /* ServiceChangeResult */
255
static int hf_h248_serviceChangeResParms;         /* ServiceChangeResParm */
256
static int hf_h248_wildcard;                      /* SEQUENCE_OF_WildcardField */
257
static int hf_h248_wildcard_item;                 /* WildcardField */
258
static int hf_h248_terminationId;                 /* T_terminationId */
259
static int hf_h248_TerminationIDList_item;        /* TerminationID */
260
static int hf_h248_termStateDescr;                /* TerminationStateDescriptor */
261
static int hf_h248_streams;                       /* T_streams */
262
static int hf_h248_mediaDescriptorOneStream;      /* StreamParms */
263
static int hf_h248_mediaDescriptorMultiStream;    /* SEQUENCE_OF_StreamDescriptor */
264
static int hf_h248_mediaDescriptorMultiStream_item;  /* StreamDescriptor */
265
static int hf_h248_streamParms;                   /* StreamParms */
266
static int hf_h248_localControlDescriptor;        /* LocalControlDescriptor */
267
static int hf_h248_localDescriptor;               /* LocalRemoteDescriptor */
268
static int hf_h248_remoteDescriptor;              /* LocalRemoteDescriptor */
269
static int hf_h248_sPstatisticsDescriptor;        /* StatisticsDescriptor */
270
static int hf_h248_streamMode;                    /* StreamMode */
271
static int hf_h248_reserveValue;                  /* BOOLEAN */
272
static int hf_h248_reserveGroup;                  /* BOOLEAN */
273
static int hf_h248_lCDpropertyParms;              /* SEQUENCE_OF_PropertyParm */
274
static int hf_h248_lCDpropertyParms_item;         /* PropertyParm */
275
static int hf_h248_propertyName;                  /* PropertyName */
276
static int hf_h248_propertyParamValue;            /* SEQUENCE_OF_PropertyID */
277
static int hf_h248_propertyParamValue_item;       /* PropertyID */
278
static int hf_h248_propParm_extraInfo;            /* PropParm_extraInfo */
279
static int hf_h248_propGrps;                      /* SEQUENCE_OF_PropertyGroup */
280
static int hf_h248_propGrps_item;                 /* PropertyGroup */
281
static int hf_h248_PropertyGroup_item;            /* PropertyParm */
282
static int hf_h248_tSDpropertyParms;              /* SEQUENCE_OF_PropertyParm */
283
static int hf_h248_tSDpropertyParms_item;         /* PropertyParm */
284
static int hf_h248_tSEventBufferControl;          /* EventBufferControl */
285
static int hf_h248_serviceState;                  /* ServiceState */
286
static int hf_h248_muxType;                       /* MuxType */
287
static int hf_h248_termList;                      /* SEQUENCE_OF_TerminationID */
288
static int hf_h248_termList_item;                 /* TerminationID */
289
static int hf_h248_nonStandardData;               /* NonStandardData */
290
static int hf_h248_eventList;                     /* SEQUENCE_OF_RequestedEvent */
291
static int hf_h248_eventList_item;                /* RequestedEvent */
292
static int hf_h248_eventAction;                   /* RequestedActions */
293
static int hf_h248_evParList;                     /* SEQUENCE_OF_EventParameter */
294
static int hf_h248_evParList_item;                /* EventParameter */
295
static int hf_h248_secondEvent;                   /* SecondEventsDescriptor */
296
static int hf_h248_notifyImmediate;               /* NULL */
297
static int hf_h248_notifyRegulated;               /* RegulatedEmbeddedDescriptor */
298
static int hf_h248_neverNotify;                   /* NULL */
299
static int hf_h248_keepActive;                    /* BOOLEAN */
300
static int hf_h248_eventDM;                       /* EventDM */
301
static int hf_h248_notifyBehaviour;               /* NotifyBehaviour */
302
static int hf_h248_resetEventsDescriptor;         /* NULL */
303
static int hf_h248_digitMapValue;                 /* DigitMapValue */
304
static int hf_h248_secondaryEventList;            /* SEQUENCE_OF_SecondRequestedEvent */
305
static int hf_h248_secondaryEventList_item;       /* SecondRequestedEvent */
306
static int hf_h248_pkgdName;                      /* PkgdName */
307
static int hf_h248_secondaryEventAction;          /* SecondRequestedActions */
308
static int hf_h248_EventBufferDescriptor_item;    /* EventSpec */
309
static int hf_h248_SignalsDescriptor_item;        /* SignalRequest */
310
static int hf_h248_signal;                        /* Signal */
311
static int hf_h248_seqSigList;                    /* SeqSigList */
312
static int hf_h248_signalList;                    /* SEQUENCE_OF_Signal */
313
static int hf_h248_signalList_item;               /* Signal */
314
static int hf_h248_signalName;                    /* SignalName */
315
static int hf_h248_sigType;                       /* SignalType */
316
static int hf_h248_duration;                      /* INTEGER_0_65535 */
317
static int hf_h248_notifyCompletion;              /* NotifyCompletion */
318
static int hf_h248_sigParList;                    /* SEQUENCE_OF_SigParameter */
319
static int hf_h248_sigParList_item;               /* SigParameter */
320
static int hf_h248_direction;                     /* SignalDirection */
321
static int hf_h248_intersigDelay;                 /* INTEGER_0_65535 */
322
static int hf_h248_sigParameterName;              /* SigParameterName */
323
static int hf_h248_value;                         /* SigParamValues */
324
static int hf_h248_extraInfo;                     /* T_extraInfo */
325
static int hf_h248_SigParamValues_item;           /* SigParamValue */
326
static int hf_h248_mtl;                           /* SEQUENCE_OF_ModemType */
327
static int hf_h248_mtl_item;                      /* ModemType */
328
static int hf_h248_mpl;                           /* SEQUENCE_OF_PropertyParm */
329
static int hf_h248_mpl_item;                      /* PropertyParm */
330
static int hf_h248_startTimer;                    /* INTEGER_0_99 */
331
static int hf_h248_shortTimer;                    /* INTEGER_0_99 */
332
static int hf_h248_longTimer;                     /* INTEGER_0_99 */
333
static int hf_h248_digitMapBody;                  /* IA5String */
334
static int hf_h248_durationTimer;                 /* INTEGER_0_99 */
335
static int hf_h248_serviceChangeMethod;           /* ServiceChangeMethod */
336
static int hf_h248_serviceChangeAddress;          /* ServiceChangeAddress */
337
static int hf_h248_serviceChangeVersion;          /* INTEGER_0_99 */
338
static int hf_h248_serviceChangeProfile;          /* ServiceChangeProfile */
339
static int hf_h248_serviceChangeReason;           /* SCreasonValue */
340
static int hf_h248_serviceChangeDelay;            /* INTEGER_0_4294967295 */
341
static int hf_h248_serviceChangeMgcId;            /* MId */
342
static int hf_h248_timeStamp;                     /* TimeNotation */
343
static int hf_h248_serviceChangeInfo;             /* AuditDescriptor */
344
static int hf_h248_serviceChangeIncompleteFlag;   /* NULL */
345
static int hf_h248_SCreasonValue_item;            /* SCreasonValueOctetStr */
346
static int hf_h248_timestamp;                     /* TimeNotation */
347
static int hf_h248_profileName;                   /* IA5String_SIZE_1_67 */
348
static int hf_h248_PackagesDescriptor_item;       /* PackagesItem */
349
static int hf_h248_StatisticsDescriptor_item;     /* StatisticsParameter */
350
static int hf_h248_statName;                      /* StatName */
351
static int hf_h248_statValue;                     /* StatValue */
352
static int hf_h248_nonStandardIdentifier;         /* NonStandardIdentifier */
353
static int hf_h248_data;                          /* OCTET_STRING */
354
static int hf_h248_object;                        /* OBJECT_IDENTIFIER */
355
static int hf_h248_h221NonStandard;               /* H221NonStandard */
356
static int hf_h248_experimental;                  /* IA5String_SIZE_8 */
357
static int hf_h248_t35CountryCode1;               /* INTEGER_0_255 */
358
static int hf_h248_t35CountryCode2;               /* INTEGER_0_255 */
359
static int hf_h248_t35Extension;                  /* INTEGER_0_255 */
360
static int hf_h248_manufacturerCode;              /* INTEGER_0_65535 */
361
static int hf_h248_date;                          /* IA5String_SIZE_8 */
362
static int hf_h248_time;                          /* IA5String_SIZE_8 */
363
static int hf_h248_Value_item;                    /* OCTET_STRING */
364
static int hf_h248_audit_result;                  /* AuditResultV1 */
365
static int hf_h248_contectAuditResult;            /* TerminationID */
366
static int hf_h248_eventParamterName;             /* EventParameterName */
367
static int hf_h248_event_param_value;             /* EventParamValueV1 */
368
static int hf_h248_sig_param_value;               /* SigParamValueV1 */
369
/* named bits */
370
static int hf_h248_T_auditToken_muxToken;
371
static int hf_h248_T_auditToken_modemToken;
372
static int hf_h248_T_auditToken_mediaToken;
373
static int hf_h248_T_auditToken_eventsToken;
374
static int hf_h248_T_auditToken_signalsToken;
375
static int hf_h248_T_auditToken_digitMapToken;
376
static int hf_h248_T_auditToken_statsToken;
377
static int hf_h248_T_auditToken_observedEventsToken;
378
static int hf_h248_T_auditToken_packagesToken;
379
static int hf_h248_T_auditToken_eventBufferToken;
380
static int hf_h248_NotifyCompletion_onTimeOut;
381
static int hf_h248_NotifyCompletion_onInterruptByEvent;
382
static int hf_h248_NotifyCompletion_onInterruptByNewSignalDescr;
383
static int hf_h248_NotifyCompletion_otherReason;
384
static int hf_h248_NotifyCompletion_onIteration;
385
386
/* Initialize the subtree pointers */
387
static int ett_h248;
388
static int ett_mtpaddress;
389
static int ett_packagename;
390
static int ett_codec;
391
static int ett_wildcard;
392
393
static int ett_h248_no_pkg;
394
static int ett_h248_no_sig;
395
static int ett_h248_no_evt;
396
397
static int h248_tap;
398
399
static gcp_hf_ett_t h248_arrel;
400
401
static int exported_pdu_tap = -1;
402
403
404
static int ett_h248_MegacoMessage;
405
static int ett_h248_AuthenticationHeader;
406
static int ett_h248_Message;
407
static int ett_h248_T_messageBody;
408
static int ett_h248_SEQUENCE_OF_Transaction;
409
static int ett_h248_MId;
410
static int ett_h248_DomainName;
411
static int ett_h248_IP4Address;
412
static int ett_h248_IP6Address;
413
static int ett_h248_Transaction;
414
static int ett_h248_TransactionRequest;
415
static int ett_h248_SEQUENCE_OF_ActionRequest;
416
static int ett_h248_TransactionPending;
417
static int ett_h248_TransactionReply;
418
static int ett_h248_T_transactionResult;
419
static int ett_h248_SEQUENCE_OF_ActionReply;
420
static int ett_h248_SegmentReply;
421
static int ett_h248_TransactionResponseAck;
422
static int ett_h248_TransactionAck;
423
static int ett_h248_ErrorDescriptor;
424
static int ett_h248_ActionRequest;
425
static int ett_h248_SEQUENCE_OF_CommandRequest;
426
static int ett_h248_ActionReply;
427
static int ett_h248_SEQUENCE_OF_CommandReply;
428
static int ett_h248_ContextRequest;
429
static int ett_h248_T_topologyReq;
430
static int ett_h248_SEQUENCE_OF_PropertyParm;
431
static int ett_h248_SEQUENCE_OF_ContextIDinList;
432
static int ett_h248_ContextAttrAuditRequest;
433
static int ett_h248_SEQUENCE_OF_IndAudPropertyParm;
434
static int ett_h248_SelectLogic;
435
static int ett_h248_CommandRequest;
436
static int ett_h248_Command;
437
static int ett_h248_CommandReply;
438
static int ett_h248_TopologyRequest;
439
static int ett_h248_AmmRequest;
440
static int ett_h248_SEQUENCE_OF_AmmDescriptor;
441
static int ett_h248_AmmDescriptor;
442
static int ett_h248_AmmsReply;
443
static int ett_h248_SubtractRequest;
444
static int ett_h248_AuditRequest;
445
static int ett_h248_AuditReply;
446
static int ett_h248_AuditResult;
447
static int ett_h248_TermListAuditResult;
448
static int ett_h248_TerminationAudit;
449
static int ett_h248_AuditReturnParameter;
450
static int ett_h248_AuditDescriptor;
451
static int ett_h248_T_auditToken;
452
static int ett_h248_SEQUENCE_OF_IndAuditParameter;
453
static int ett_h248_IndAuditParameter;
454
static int ett_h248_IndAudMediaDescriptor;
455
static int ett_h248_IndAudMediaDescriptorStreams;
456
static int ett_h248_SEQUENCE_OF_IndAudStreamDescriptor;
457
static int ett_h248_IndAudStreamDescriptor;
458
static int ett_h248_IndAudStreamParms;
459
static int ett_h248_IndAudLocalControlDescriptor;
460
static int ett_h248_IndAudPropertyParm;
461
static int ett_h248_IndAudLocalRemoteDescriptor;
462
static int ett_h248_IndAudPropertyGroup;
463
static int ett_h248_IndAudTerminationStateDescriptor;
464
static int ett_h248_IndAudEventsDescriptor;
465
static int ett_h248_IndAudEventBufferDescriptor;
466
static int ett_h248_IndAudSignalsDescriptor;
467
static int ett_h248_IndAudSeqSigList;
468
static int ett_h248_IndAudSignal;
469
static int ett_h248_IndAudDigitMapDescriptor;
470
static int ett_h248_IndAudStatisticsDescriptor;
471
static int ett_h248_IndAudPackagesDescriptor;
472
static int ett_h248_NotifyRequest;
473
static int ett_h248_NotifyReply;
474
static int ett_h248_ObservedEventsDescriptor;
475
static int ett_h248_SEQUENCE_OF_ObservedEvent;
476
static int ett_h248_ObservedEvent;
477
static int ett_h248_SEQUENCE_OF_EventParameter;
478
static int ett_h248_EventParameter;
479
static int ett_h248_EventPar_extraInfo;
480
static int ett_h248_EventParamValues;
481
static int ett_h248_ServiceChangeRequest;
482
static int ett_h248_ServiceChangeReply;
483
static int ett_h248_ServiceChangeResult;
484
static int ett_h248_TerminationID;
485
static int ett_h248_SEQUENCE_OF_WildcardField;
486
static int ett_h248_TerminationIDList;
487
static int ett_h248_MediaDescriptor;
488
static int ett_h248_T_streams;
489
static int ett_h248_SEQUENCE_OF_StreamDescriptor;
490
static int ett_h248_StreamDescriptor;
491
static int ett_h248_StreamParms;
492
static int ett_h248_LocalControlDescriptor;
493
static int ett_h248_PropertyParm;
494
static int ett_h248_SEQUENCE_OF_PropertyID;
495
static int ett_h248_PropParm_extraInfo;
496
static int ett_h248_LocalRemoteDescriptor;
497
static int ett_h248_SEQUENCE_OF_PropertyGroup;
498
static int ett_h248_PropertyGroup;
499
static int ett_h248_TerminationStateDescriptor;
500
static int ett_h248_MuxDescriptor;
501
static int ett_h248_SEQUENCE_OF_TerminationID;
502
static int ett_h248_EventsDescriptor;
503
static int ett_h248_SEQUENCE_OF_RequestedEvent;
504
static int ett_h248_RequestedEvent;
505
static int ett_h248_RegulatedEmbeddedDescriptor;
506
static int ett_h248_NotifyBehaviour;
507
static int ett_h248_RequestedActions;
508
static int ett_h248_EventDM;
509
static int ett_h248_SecondEventsDescriptor;
510
static int ett_h248_SEQUENCE_OF_SecondRequestedEvent;
511
static int ett_h248_SecondRequestedEvent;
512
static int ett_h248_SecondRequestedActions;
513
static int ett_h248_EventBufferDescriptor;
514
static int ett_h248_EventSpec;
515
static int ett_h248_SignalsDescriptor;
516
static int ett_h248_SignalRequest;
517
static int ett_h248_SeqSigList;
518
static int ett_h248_SEQUENCE_OF_Signal;
519
static int ett_h248_Signal;
520
static int ett_h248_SEQUENCE_OF_SigParameter;
521
static int ett_h248_NotifyCompletion;
522
static int ett_h248_SigParameter;
523
static int ett_h248_T_extraInfo;
524
static int ett_h248_SigParamValues;
525
static int ett_h248_ModemDescriptor;
526
static int ett_h248_SEQUENCE_OF_ModemType;
527
static int ett_h248_DigitMapDescriptor;
528
static int ett_h248_DigitMapValue;
529
static int ett_h248_ServiceChangeParm;
530
static int ett_h248_SCreasonValue;
531
static int ett_h248_ServiceChangeAddress;
532
static int ett_h248_ServiceChangeResParm;
533
static int ett_h248_ServiceChangeProfile;
534
static int ett_h248_PackagesDescriptor;
535
static int ett_h248_PackagesItem;
536
static int ett_h248_StatisticsDescriptor;
537
static int ett_h248_StatisticsParameter;
538
static int ett_h248_NonStandardData;
539
static int ett_h248_NonStandardIdentifier;
540
static int ett_h248_H221NonStandard;
541
static int ett_h248_TimeNotation;
542
static int ett_h248_Value;
543
static int ett_h248_AuditReplyV1;
544
static int ett_h248_AuditResultV1;
545
static int ett_h248_EventParameterV1;
546
static int ett_h248_SigParameterV1;
547
548
static expert_field ei_h248_errored_command;
549
static expert_field ei_h248_transactionId64;
550
static expert_field ei_h248_context_id64;
551
static expert_field ei_h248_octet_string_expected;
552
553
static dissector_table_t subdissector_table;
554
555
static int ss7pc_address_type = -1;
556
557
/* Gateway Control Protocol -- Context Tracking */
558
559
const value_string gcp_cmd_type[] = {
560
    { GCP_CMD_NONE,               "NoCommand"},
561
    { GCP_CMD_ADD_REQ,            "addReq"},
562
    { GCP_CMD_MOVE_REQ,           "moveReq"},
563
    { GCP_CMD_MOD_REQ,            "modReq"},
564
    { GCP_CMD_SUB_REQ,            "subtractReq"},
565
    { GCP_CMD_AUDITCAP_REQ,       "auditCapRequest"},
566
    { GCP_CMD_AUDITVAL_REQ,       "auditValueRequest"},
567
    { GCP_CMD_NOTIFY_REQ,         "notifyReq"},
568
    { GCP_CMD_SVCCHG_REQ,         "serviceChangeReq"},
569
    { GCP_CMD_TOPOLOGY_REQ,       "topologyReq"},
570
    { GCP_CMD_CTX_ATTR_AUDIT_REQ, "ctxAttrAuditReq"},
571
    { GCP_CMD_ADD_REPLY,          "addReply"},
572
    { GCP_CMD_MOVE_REPLY,         "moveReply"},
573
    { GCP_CMD_MOD_REPLY,          "modReply"},
574
    { GCP_CMD_SUB_REPLY,          "subtractReply"},
575
    { GCP_CMD_AUDITCAP_REPLY,     "auditCapReply"},
576
    { GCP_CMD_AUDITVAL_REPLY,     "auditValReply"},
577
    { GCP_CMD_NOTIFY_REPLY,       "notifyReply"},
578
    { GCP_CMD_SVCCHG_REPLY,       "serviceChangeReply"},
579
    { GCP_CMD_TOPOLOGY_REPLY,     "topologyReply"},
580
    { 0, NULL }
581
};
582
583
const value_string gcp_term_types[] = {
584
    { GCP_TERM_TYPE_AAL1,        "aal1" },
585
    { GCP_TERM_TYPE_AAL2,        "aal2" },
586
    { GCP_TERM_TYPE_AAL1_STRUCT, "aal1struct" },
587
    { GCP_TERM_TYPE_IP_RTP,      "ipRtp" },
588
    { GCP_TERM_TYPE_TDM,         "tdm" },
589
    { 0, NULL }
590
};
591
592
static wmem_tree_t* gcp_msgs;
593
static wmem_tree_t* gcp_trxs;
594
static wmem_tree_t* gcp_ctxs_by_trx;
595
static wmem_tree_t* gcp_ctxs;
596
597
37
gcp_msg_t* gcp_msg(packet_info* pinfo, int o, bool keep_persistent_data) {
598
37
    gcp_msg_t* m;
599
37
    uint32_t framenum = (uint32_t)pinfo->num;
600
37
    uint32_t offset = (uint32_t)o;
601
37
    address* src = &(pinfo->src);
602
37
    address* dst = &(pinfo->dst);
603
37
    address* lo_addr;
604
37
    address* hi_addr;
605
606
37
    if (keep_persistent_data) {
607
0
        wmem_tree_key_t key[3];
608
609
0
        key[0].length = 1;
610
0
        key[0].key = &(framenum);
611
0
        key[1].length = 1;
612
0
        key[1].key = &offset;
613
0
        key[2].length = 0;
614
0
        key[2].key =NULL;
615
616
0
        if (( m = (gcp_msg_t *)wmem_tree_lookup32_array(gcp_msgs,key) )) {
617
0
            m->committed = true;
618
0
            return m;
619
0
        } else {
620
0
            m = wmem_new(wmem_file_scope(), gcp_msg_t);
621
0
            m->framenum = framenum;
622
0
            m->frametime = pinfo->abs_ts;
623
0
            m->trxs = NULL;
624
0
            m->committed = false;
625
626
0
            wmem_tree_insert32_array(gcp_msgs,key,m);
627
0
        }
628
37
    } else {
629
37
        m = wmem_new0(pinfo->pool, gcp_msg_t);
630
37
        m->framenum = framenum;
631
37
        m->trxs = NULL;
632
37
        m->committed = false;
633
37
    }
634
635
37
    if (cmp_address(src, dst) < 0)  {
636
1
        lo_addr = src;
637
1
        hi_addr = dst;
638
36
    } else {
639
36
        lo_addr = dst;
640
36
        hi_addr = src;
641
36
    }
642
643
37
    switch(lo_addr->type) {
644
32
        case AT_NONE:
645
32
            m->lo_addr = 0;
646
32
            m->hi_addr = 0;
647
32
            break;
648
3
        case AT_IPv4:
649
3
            memcpy((uint8_t*)&(m->hi_addr),hi_addr->data,4);
650
3
            memcpy((uint8_t*)&(m->lo_addr),lo_addr->data,4);
651
3
            break;
652
2
        default:
653
2
            if (lo_addr->type == ss7pc_address_type) {
654
1
                m->hi_addr = mtp3_pc_hash((const mtp3_addr_pc_t *)hi_addr->data);
655
1
                m->lo_addr = mtp3_pc_hash((const mtp3_addr_pc_t *)lo_addr->data);
656
1
            }
657
1
            else {
658
                /* XXX: heuristic and error prone */
659
1
                m->hi_addr = g_str_hash(address_to_str(pinfo->pool, hi_addr));
660
1
                m->lo_addr = g_str_hash(address_to_str(pinfo->pool, lo_addr));
661
1
            }
662
2
        break;
663
37
    }
664
665
37
    return m;
666
37
}
667
668
1
gcp_trx_t* gcp_trx(gcp_msg_t* m ,uint32_t t_id , gcp_trx_type_t type, packet_info *pinfo, bool keep_persistent_data) {
669
1
    gcp_trx_t* t = NULL;
670
1
    gcp_trx_msg_t* trxmsg;
671
672
1
    if ( !m ) return NULL;
673
674
1
    if (keep_persistent_data) {
675
0
        if (m->committed) {
676
677
0
            for ( trxmsg = m->trxs; trxmsg; trxmsg = trxmsg->next) {
678
0
                if (trxmsg->trx && trxmsg->trx->id == t_id) {
679
0
                    return trxmsg->trx;
680
0
                }
681
0
            }
682
0
            DISSECTOR_ASSERT_NOT_REACHED();
683
0
        } else {
684
0
            wmem_tree_key_t key[4];
685
686
0
            key[0].length = 1;
687
0
            key[0].key = &(m->hi_addr);
688
0
            key[1].length = 1;
689
0
            key[1].key = &(m->lo_addr);
690
0
            key[2].length = 1;
691
0
            key[2].key = &(t_id);
692
0
            key[3].length = 0;
693
0
            key[3].key = NULL;
694
695
0
            trxmsg = wmem_new(wmem_file_scope(), gcp_trx_msg_t);
696
0
            t = (gcp_trx_t *)wmem_tree_lookup32_array(gcp_trxs,key);
697
698
0
            if (!t) {
699
0
                t = wmem_new(wmem_file_scope(), gcp_trx_t);
700
0
                t->initial = m;
701
0
                t->id = t_id;
702
0
                t->type = type;
703
0
                t->pendings = 0;
704
0
                t->error = 0;
705
0
                t->cmds = NULL;
706
707
0
                wmem_tree_insert32_array(gcp_trxs,key,t);
708
0
            }
709
710
            /* XXX: request, reply and ack + point to frames where they are */
711
0
            switch ( type ) {
712
0
                case GCP_TRX_PENDING:
713
0
                    t->pendings++;
714
0
                    break;
715
0
                default:
716
0
                    break;
717
0
            }
718
719
0
        }
720
1
    } else {
721
1
        t = wmem_new(pinfo->pool, gcp_trx_t);
722
1
        trxmsg = wmem_new(pinfo->pool, gcp_trx_msg_t);
723
1
        t->initial = NULL;
724
1
        t->id = t_id;
725
1
        t->type = type;
726
1
        t->pendings = 0;
727
1
        t->error = 0;
728
1
        t->cmds = NULL;
729
1
    }
730
731
1
    DISSECTOR_ASSERT(trxmsg);
732
733
1
    trxmsg->trx = t;
734
1
    trxmsg->next = NULL;
735
1
    trxmsg->last = trxmsg;
736
737
1
    if (m->trxs) {
738
0
        m->trxs->last = m->trxs->last->next = trxmsg;
739
1
    } else {
740
1
        m->trxs = trxmsg;
741
1
    }
742
743
1
    return t;
744
1
}
745
746
747
0
gcp_ctx_t* gcp_ctx(gcp_msg_t* m, gcp_trx_t* t, uint32_t c_id, packet_info *pinfo, bool persistent) {
748
0
    gcp_ctx_t* context = NULL;
749
0
    gcp_ctx_t** context_p = NULL;
750
751
0
    if ( !m || !t ) return NULL;
752
753
0
    if (persistent) {
754
755
0
        wmem_tree_key_t ctx_key[4];
756
0
        wmem_tree_key_t trx_key[4];
757
758
0
        ctx_key[0].length = 1;
759
0
        ctx_key[0].key = &(m->hi_addr);
760
0
        ctx_key[1].length = 1;
761
0
        ctx_key[1].key = &(m->lo_addr);
762
0
        ctx_key[2].length = 1;
763
0
        ctx_key[2].key = &(c_id);
764
0
        ctx_key[3].length = 0;
765
0
        ctx_key[3].key = NULL;
766
767
0
        trx_key[0].length = 1;
768
0
        trx_key[0].key = &(m->hi_addr);
769
0
        trx_key[1].length = 1;
770
0
        trx_key[1].key = &(m->lo_addr);
771
0
        trx_key[2].length = 1;
772
0
        trx_key[2].key = &(t->id);
773
0
        trx_key[3].length = 0;
774
0
        trx_key[3].key = NULL;
775
776
0
        if (m->committed) {
777
0
            if (( context = (gcp_ctx_t *)wmem_tree_lookup32_array(gcp_ctxs_by_trx,trx_key) )) {
778
0
                return context;
779
0
            } if ((context_p = (gcp_ctx_t **)wmem_tree_lookup32_array(gcp_ctxs,ctx_key))) {
780
0
                context = *context_p;
781
782
0
                do {
783
0
                    if (context->initial->framenum <= m->framenum) {
784
0
                        return context;
785
0
                    }
786
0
                } while(( context = context->prev ));
787
788
0
                DISSECTOR_ASSERT(! "a context should exist");
789
0
            }
790
0
        } else {
791
0
            if (c_id == CHOOSE_CONTEXT) {
792
0
                if (! ( context = (gcp_ctx_t *)wmem_tree_lookup32_array(gcp_ctxs_by_trx,trx_key))) {
793
0
                    context = wmem_new(wmem_file_scope(), gcp_ctx_t);
794
0
                    context->initial = m;
795
0
                    context->cmds = NULL;
796
0
                    context->id = c_id;
797
0
                    context->terms.last = &(context->terms);
798
0
                    context->terms.next = NULL;
799
0
                    context->terms.term = NULL;
800
801
0
                    wmem_tree_insert32_array(gcp_ctxs_by_trx,trx_key,context);
802
0
                }
803
0
            } else {
804
0
                if (( context = (gcp_ctx_t *)wmem_tree_lookup32_array(gcp_ctxs_by_trx,trx_key) )) {
805
0
                    if (( context_p = (gcp_ctx_t **)wmem_tree_lookup32_array(gcp_ctxs,ctx_key) )) {
806
0
                        if (context != *context_p) {
807
0
                            if(context->id != CHOOSE_CONTEXT) {
808
0
                                context = wmem_new(wmem_file_scope(), gcp_ctx_t);
809
0
                            }
810
0
                            context->initial = m;
811
0
                            context->id = c_id;
812
0
                            context->cmds = NULL;
813
0
                            context->terms.last = &(context->terms);
814
0
                            context->terms.next = NULL;
815
0
                            context->terms.term = NULL;
816
817
0
                            context->prev = *context_p;
818
0
                            *context_p = context;
819
0
                        }
820
0
                    } else {
821
0
                        context_p = wmem_new(wmem_file_scope(), gcp_ctx_t*);
822
0
                        *context_p = context;
823
0
                        context->initial = m;
824
0
                        context->id = c_id;
825
0
                        wmem_tree_insert32_array(gcp_ctxs,ctx_key,context_p);
826
0
                    }
827
0
                } else if (! ( context_p = (gcp_ctx_t**)wmem_tree_lookup32_array(gcp_ctxs,ctx_key) )) {
828
0
                    context = wmem_new(wmem_file_scope(), gcp_ctx_t);
829
0
                    context->initial = m;
830
0
                    context->id = c_id;
831
0
                    context->cmds = NULL;
832
0
                    context->terms.last = &(context->terms);
833
0
                    context->terms.next = NULL;
834
0
                    context->terms.term = NULL;
835
836
0
                    context_p = wmem_new(wmem_file_scope(), gcp_ctx_t*);
837
0
                    *context_p = context;
838
0
                    wmem_tree_insert32_array(gcp_ctxs,ctx_key,context_p);
839
0
                } else {
840
0
                    context = *context_p;
841
0
                }
842
0
            }
843
0
        }
844
0
    } else {
845
0
        context = wmem_new(pinfo->pool, gcp_ctx_t);
846
0
        context->initial = m;
847
0
        context->cmds = NULL;
848
0
        context->id = c_id;
849
0
        context->terms.last = &(context->terms);
850
0
        context->terms.next = NULL;
851
0
        context->terms.term = NULL;
852
0
    }
853
854
0
    return context;
855
0
}
856
857
0
gcp_cmd_t* gcp_cmd(gcp_msg_t* m, gcp_trx_t* t, gcp_ctx_t* c, gcp_cmd_type_t type, unsigned offset, packet_info *pinfo, bool persistent) {
858
0
    gcp_cmd_t* cmd;
859
0
    gcp_cmd_msg_t* cmdtrx;
860
0
    gcp_cmd_msg_t* cmdctx;
861
862
0
    if ( !m || !t || !c ) return NULL;
863
864
0
    if (persistent) {
865
0
        if (m->committed) {
866
0
            DISSECTOR_ASSERT(t->cmds != NULL);
867
868
0
            for (cmdctx = t->cmds; cmdctx; cmdctx = cmdctx->next) {
869
0
                cmd = cmdctx->cmd;
870
0
                if (cmd->msg == m && cmd->offset == offset) {
871
0
                    return cmd;
872
0
                }
873
0
            }
874
875
0
            DISSECTOR_ASSERT(!"called for a command that does not exist!");
876
877
0
            return NULL;
878
0
        } else {
879
0
            cmd = wmem_new(wmem_file_scope(), gcp_cmd_t);
880
0
            cmdtrx = wmem_new(wmem_file_scope(), gcp_cmd_msg_t);
881
0
            cmdctx = wmem_new(wmem_file_scope(), gcp_cmd_msg_t);
882
0
        }
883
0
    } else {
884
0
        cmd = wmem_new(pinfo->pool, gcp_cmd_t);
885
0
        cmdtrx = wmem_new(pinfo->pool, gcp_cmd_msg_t);
886
0
        cmdctx = wmem_new(pinfo->pool, gcp_cmd_msg_t);
887
0
    }
888
889
0
    cmd->type = type;
890
0
    cmd->offset = offset;
891
0
    cmd->terms.term = NULL;
892
0
    cmd->terms.next = NULL;
893
0
    cmd->terms.last = &(cmd->terms);
894
0
    cmd->str = NULL;
895
0
    cmd->msg = m;
896
0
    if ((type != GCP_CMD_NONE) && (!persistent)){
897
0
        cmd->str = val_to_str_const(type, gcp_cmd_type, "Unknown");
898
0
    }
899
0
    cmd->trx = t;
900
0
    cmd->ctx = c;
901
0
    cmd->error = 0;
902
903
0
    cmdctx->cmd = cmdtrx->cmd = cmd;
904
0
    cmdctx->next =  cmdtrx->next = NULL;
905
0
    cmdctx->last = cmdtrx->last = NULL;
906
907
0
    if (t->cmds) {
908
0
        t->cmds->last->next = cmdtrx;
909
0
        t->cmds->last = cmdtrx;
910
0
    } else {
911
0
        t->cmds = cmdtrx;
912
0
        t->cmds->last = cmdtrx;
913
0
    }
914
915
0
    if (c->cmds) {
916
0
        c->cmds->last->next = cmdctx;
917
0
        c->cmds->last = cmdctx;
918
0
    } else {
919
0
        c->cmds = cmdctx;
920
0
        c->cmds->last = cmdctx;
921
0
    }
922
923
0
    return cmd;
924
0
}
925
926
0
gcp_term_t* gcp_cmd_add_term(gcp_msg_t* m, gcp_trx_t* tr, gcp_cmd_t* c, gcp_term_t* t, gcp_wildcard_t wildcard, packet_info *pinfo, bool persistent) {
927
0
    gcp_terms_t* ct;
928
0
    gcp_terms_t* ct2;
929
930
0
    static gcp_term_t all_terms = {"$",(const uint8_t*)"",1,GCP_TERM_TYPE_UNKNOWN,NULL,NULL,NULL};
931
932
0
    if ( !c ) return NULL;
933
934
0
    if ( wildcard == GCP_WILDCARD_CHOOSE) {
935
0
        return &all_terms;
936
0
    }
937
938
0
    if (persistent) {
939
0
        if ( c->msg->committed ) {
940
0
            if (wildcard == GCP_WILDCARD_ALL) {
941
0
                for (ct = c->ctx->terms.next; ct; ct = ct->next) {
942
                    /* XXX not handling more wildcards in one msg */
943
0
                    if ( ct->term->start == m ) {
944
0
                        return ct->term;
945
0
                    }
946
0
                }
947
0
                return NULL;
948
0
            } else {
949
0
                for (ct = c->ctx->terms.next; ct; ct = ct->next) {
950
0
                    if ( g_str_equal(ct->term->str,t->str) ) {
951
0
                        return ct->term;
952
0
                    }
953
0
                }
954
0
                return NULL;
955
0
            }
956
0
        } else {
957
958
0
            for (ct = c->ctx->terms.next; ct; ct = ct->next) {
959
0
                if ( g_str_equal(ct->term->str,t->str) || ct->term->start == m) {
960
0
                    break;
961
0
                }
962
0
            }
963
964
0
            if ( ! ct ) {
965
966
0
                if (wildcard == GCP_WILDCARD_ALL) {
967
0
                    ct = wmem_new(wmem_file_scope(), gcp_terms_t);
968
0
                    ct->next = NULL;
969
0
                    ct->term = wmem_new0(wmem_file_scope(), gcp_term_t);
970
971
0
                    ct->term->start = m;
972
0
                    ct->term->str = "*";
973
0
                    ct->term->buffer = NULL;
974
0
                    ct->term->len = 0;
975
976
0
                    c->terms.last = c->terms.last->next = ct;
977
978
0
                    ct2 = wmem_new0(wmem_file_scope(), gcp_terms_t);
979
0
                    ct2->term = ct->term;
980
981
0
                    c->ctx->terms.last->next = ct2;
982
0
                    c->ctx->terms.last = ct2;
983
984
0
                    return ct->term;
985
0
                } else {
986
0
                    for (ct = c->ctx->terms.next; ct; ct = ct->next) {
987
                        /* XXX not handling more wildcards in one msg */
988
0
                        if ( ct->term->buffer == NULL && tr->cmds->cmd->msg == ct->term->start ) {
989
0
                            ct->term->str = wmem_strdup(wmem_file_scope(), t->str);
990
0
                            ct->term->buffer = (const uint8_t *)wmem_memdup(wmem_file_scope(), t->buffer,t->len);
991
0
                            ct->term->len = t->len;
992
993
0
                            ct2 = wmem_new0(wmem_file_scope(), gcp_terms_t);
994
0
                            ct2->term = ct->term;
995
996
0
                            c->terms.last = c->terms.last->next = ct2;
997
998
0
                            return ct->term;
999
0
                        }
1000
1001
0
                        if  ( g_str_equal(ct->term->str,t->str) ) {
1002
0
                            ct2 = wmem_new0(wmem_file_scope(), gcp_terms_t);
1003
0
                            ct2->term = ct->term;
1004
1005
0
                            c->terms.last = c->terms.last->next = ct2;
1006
1007
0
                            return ct->term;
1008
0
                        }
1009
0
                    }
1010
1011
0
                    ct = wmem_new(wmem_file_scope(), gcp_terms_t);
1012
0
                    ct->next = NULL;
1013
0
                    ct->term = wmem_new0(wmem_file_scope(), gcp_term_t);
1014
1015
0
                    ct->term->start = m;
1016
0
                    ct->term->str = wmem_strdup(wmem_file_scope(), t->str);
1017
0
                    ct->term->buffer = (const uint8_t *)wmem_memdup(wmem_file_scope(), t->buffer,t->len);
1018
0
                    ct->term->len = t->len;
1019
1020
0
                    ct2 = wmem_new0(wmem_file_scope(), gcp_terms_t);
1021
0
                    ct2->term = ct->term;
1022
1023
0
                    c->terms.last = c->terms.last->next = ct2;
1024
1025
0
                    ct2 = wmem_new0(wmem_file_scope(), gcp_terms_t);
1026
0
                    ct2->term = ct->term;
1027
1028
0
                    c->ctx->terms.last = c->ctx->terms.last->next = ct2;
1029
1030
0
                    return ct->term;
1031
0
                }
1032
0
            } else {
1033
0
                ct2 = wmem_new0(wmem_file_scope(), gcp_terms_t);
1034
0
                ct2->term = ct->term;
1035
1036
0
                c->terms.last = c->terms.last->next = ct2;
1037
0
                return ct->term;
1038
0
            }
1039
1040
0
            DISSECTOR_ASSERT_NOT_REACHED();
1041
0
        }
1042
0
    } else {
1043
0
        ct = wmem_new(pinfo->pool, gcp_terms_t);
1044
0
        ct->term = t;
1045
0
        ct->next = NULL;
1046
0
        c->terms.last = c->terms.last->next = ct;
1047
1048
0
        return t;
1049
0
    }
1050
1051
0
}
1052
1053
0
static const char* gcp_cmd_to_str(gcp_cmd_t* c, wmem_allocator_t *scope, bool persistent) {
1054
0
    const char* s;
1055
0
    gcp_terms_t* term;
1056
1057
0
    if ( !c ) return "-";
1058
1059
0
    switch (c->type) {
1060
0
        case GCP_CMD_NONE:
1061
0
            return "-";
1062
0
        case GCP_CMD_ADD_REQ:
1063
0
            s = "AddReq {";
1064
0
            break;
1065
0
        case GCP_CMD_MOVE_REQ:
1066
0
            s = "MoveReq {";
1067
0
            break;
1068
0
        case GCP_CMD_MOD_REQ:
1069
0
            s = "ModReq {";
1070
0
            break;
1071
0
        case GCP_CMD_SUB_REQ:
1072
0
            s = "SubReq {";
1073
0
            break;
1074
0
        case GCP_CMD_AUDITCAP_REQ:
1075
0
            s = "AuditCapReq {";
1076
0
            break;
1077
0
        case GCP_CMD_AUDITVAL_REQ:
1078
0
            s = "AuditValReq {";
1079
0
            break;
1080
0
        case GCP_CMD_NOTIFY_REQ:
1081
0
            s = "NotifyReq {";
1082
0
            break;
1083
0
        case GCP_CMD_SVCCHG_REQ:
1084
0
            s = "SvcChgReq {";
1085
0
            break;
1086
0
        case GCP_CMD_TOPOLOGY_REQ:
1087
0
            s = "TopologyReq {";
1088
0
            break;
1089
0
        case GCP_CMD_CTX_ATTR_AUDIT_REQ:
1090
0
            s = "CtxAttribAuditReq {";
1091
0
            break;
1092
0
        case GCP_CMD_ADD_REPLY:
1093
0
            s = "AddReply {";
1094
0
            break;
1095
0
        case GCP_CMD_MOVE_REPLY:
1096
0
            s = "MoveReply {";
1097
0
            break;
1098
0
        case GCP_CMD_MOD_REPLY:
1099
0
            s = "ModReply {";
1100
0
            break;
1101
0
        case GCP_CMD_SUB_REPLY:
1102
0
            s = "SubReply {";
1103
0
            break;
1104
0
        case GCP_CMD_AUDITCAP_REPLY:
1105
0
            s = "AuditCapReply {";
1106
0
            break;
1107
0
        case GCP_CMD_AUDITVAL_REPLY:
1108
0
            s = "AuditValReply {";
1109
0
            break;
1110
0
        case GCP_CMD_NOTIFY_REPLY:
1111
0
            s = "NotifyReply {";
1112
0
            break;
1113
0
        case GCP_CMD_SVCCHG_REPLY:
1114
0
            s = "SvcChgReply {";
1115
0
            break;
1116
0
        case GCP_CMD_TOPOLOGY_REPLY:
1117
0
            s = "TopologyReply {";
1118
0
            break;
1119
0
        case GCP_CMD_REPLY:
1120
0
            s = "ActionReply {";
1121
0
            break;
1122
0
        case GCP_CMD_OTHER_REQ:
1123
0
            s = "Request {";
1124
0
            break;
1125
0
        default:
1126
0
            s = "-";
1127
0
            break;
1128
0
    }
1129
1130
0
    for (term = c->terms.next; term; term = term->next) {
1131
0
        s = wmem_strdup_printf(scope, "%s %s", s, term->term->str);
1132
0
    }
1133
1134
0
    if (c->error) {
1135
0
        s = wmem_strdup_printf(scope, "%s Error=%i", s, c->error);
1136
0
    }
1137
1138
0
    s = wmem_strdup_printf(scope, "%s }", s);
1139
1140
0
    if (persistent) {
1141
        /* FIXME: this method has a side-effect but is buried deep within an apparently side-effect free string helper */
1142
0
        if (! c->str) c->str = wmem_strdup(wmem_file_scope(), s);
1143
0
    } else {
1144
0
        c->str = s;
1145
0
    }
1146
1147
0
    return s;
1148
0
}
1149
1150
0
static const char * gcp_trx_to_str(gcp_msg_t* m, gcp_trx_t* t, wmem_allocator_t *scope, bool persistent) {
1151
0
    wmem_strbuf_t *s;
1152
0
    gcp_cmd_msg_t* c;
1153
1154
0
    if ( !m || !t ) return "-";
1155
1156
0
    s = wmem_strbuf_new(scope, NULL);
1157
0
    wmem_strbuf_append_printf(s, "T %x { ", t->id);
1158
1159
0
    if (t->cmds) {
1160
0
        if (t->cmds->cmd->ctx) {
1161
0
            wmem_strbuf_append_printf(s, " C %x {", t->cmds->cmd->ctx->id);
1162
1163
0
            for (c = t->cmds; c; c = c->next) {
1164
0
                if (c->cmd->msg == m) {
1165
0
                    wmem_strbuf_append_c(s, ' ');
1166
0
                    wmem_strbuf_append(s, gcp_cmd_to_str(c->cmd, scope, persistent));
1167
0
                }
1168
0
            }
1169
1170
0
            wmem_strbuf_append(s, " }");
1171
0
        }
1172
0
    }
1173
1174
0
    if (t->error) {
1175
0
        wmem_strbuf_append_printf(s, " Error=%i", t->error);
1176
0
    }
1177
1178
0
    wmem_strbuf_append(s, " }");
1179
1180
0
    return wmem_strbuf_finalize(s);
1181
0
}
1182
1183
1
const char* gcp_msg_to_str(gcp_msg_t* m, wmem_allocator_t *scope, bool persistent) {
1184
1
    gcp_trx_msg_t* t;
1185
1
    wmem_strbuf_t *s;
1186
1187
1
    if ( !m ) return "-";
1188
1189
1
    s = wmem_strbuf_new(scope, NULL);
1190
1
    for (t = m->trxs; t; t = t->next) {
1191
0
        wmem_strbuf_append_c(s, ' ');
1192
0
        wmem_strbuf_append(s, gcp_trx_to_str(m, t->trx, scope, persistent));
1193
0
    }
1194
1195
1
    return wmem_strbuf_finalize(s);
1196
1
}
1197
1198
typedef struct _gcp_ctxs_t {
1199
    struct _gcp_ctx_t* ctx;
1200
    struct _gcp_ctxs_t* next;
1201
} gcp_ctxs_t;
1202
1203
/*static const char* trx_types[] = {"None","Req","Reply","Pending","Ack"};*/
1204
1205
0
void gcp_analyze_msg(proto_tree* gcp_tree, packet_info* pinfo, tvbuff_t* gcp_tvb, gcp_msg_t* m, gcp_hf_ett_t* ids, expert_field* command_err) {
1206
0
    gcp_trx_msg_t* t;
1207
0
    gcp_ctxs_t contexts = {NULL,NULL};
1208
0
    gcp_ctxs_t* ctx_node;
1209
0
    gcp_cmd_msg_t* c;
1210
1211
1212
0
    for (t = m->trxs; t; t = t->next) {
1213
0
        for (c = t->trx->cmds; c; c = c->next) {
1214
0
            gcp_ctx_t* ctx = c->cmd->ctx;
1215
1216
0
            for (ctx_node = contexts.next; ctx_node; ctx_node = ctx_node->next) {
1217
0
                if (ctx_node->ctx->id == ctx->id) {
1218
0
                    break;
1219
0
                }
1220
0
            }
1221
1222
0
            if (! ctx_node) {
1223
0
                ctx_node = wmem_new(pinfo->pool, gcp_ctxs_t);
1224
0
                ctx_node->ctx = ctx;
1225
0
                ctx_node->next = contexts.next;
1226
0
                contexts.next = ctx_node;
1227
0
            }
1228
0
        }
1229
0
    }
1230
1231
0
    for (ctx_node = contexts.next; ctx_node; ctx_node = ctx_node->next) {
1232
0
        gcp_ctx_t* ctx = ctx_node->ctx;
1233
0
        proto_item* ctx_item = proto_tree_add_uint(gcp_tree,ids->hf.ctx,gcp_tvb,0,0,ctx->id);
1234
0
        proto_tree* ctx_tree = proto_item_add_subtree(ctx_item,ids->ett.ctx);
1235
0
        gcp_terms_t *ctx_term;
1236
1237
0
        proto_item_set_generated(ctx_item);
1238
1239
0
        if (ctx->cmds) {
1240
0
            proto_tree* history_tree = proto_tree_add_subtree(ctx_tree,gcp_tvb,0,0,ids->ett.ctx_cmds,NULL,"[ Command History ]");
1241
1242
0
            for (c = ctx->cmds; c; c = c->next) {
1243
0
                proto_item* cmd_item = proto_tree_add_uint(history_tree,ids->hf.ctx_cmd,gcp_tvb,0,0,c->cmd->msg->framenum);
1244
0
                if (c->cmd->str) proto_item_append_text(cmd_item,"  %s ",c->cmd->str);
1245
0
                proto_item_set_generated(cmd_item);
1246
0
                if (c->cmd->error) {
1247
0
                    expert_add_info(pinfo, cmd_item, command_err);
1248
0
                }
1249
0
            }
1250
0
        }
1251
1252
0
        if (( ctx_term = ctx->terms.next )) {
1253
0
            proto_tree* terms_tree = proto_tree_add_subtree(ctx_tree,gcp_tvb,0,0,ids->ett.ctx_terms,NULL,"[ Terminations Used ]");
1254
1255
0
            for (; ctx_term; ctx_term = ctx_term->next ) {
1256
0
                if ( ctx_term->term && ctx_term->term->str) {
1257
0
                    proto_item* pi = proto_tree_add_string(terms_tree,ids->hf.ctx_term,gcp_tvb,0,0,ctx_term->term->str);
1258
0
                    proto_tree* term_tree = proto_item_add_subtree(pi,ids->ett.ctx_term);
1259
1260
0
                    proto_item_set_generated(pi);
1261
1262
0
                    if (ctx_term->term->type) {
1263
0
                        pi = proto_tree_add_uint(term_tree,ids->hf.ctx_term_type,gcp_tvb,0,0,ctx_term->term->type);
1264
0
                        proto_item_set_generated(pi);
1265
0
                    }
1266
1267
0
                    if (ctx_term->term->bir) {
1268
0
                        pi = proto_tree_add_string(term_tree,ids->hf.ctx_term_bir,gcp_tvb,0,0,ctx_term->term->bir);
1269
0
                        proto_item_set_generated(pi);
1270
0
                    }
1271
1272
0
                    if (ctx_term->term->nsap) {
1273
0
                        pi = proto_tree_add_string(term_tree,ids->hf.ctx_term_nsap,gcp_tvb,0,0,ctx_term->term->nsap);
1274
0
                        proto_item_set_generated(pi);
1275
0
                    }
1276
1277
0
                    if (ctx_term->term->bir && ctx_term->term->nsap) {
1278
0
                        char* tmp_key = wmem_strdup_printf(pinfo->pool, "%s:%s",ctx_term->term->nsap,ctx_term->term->bir);
1279
0
                        char* key = g_ascii_strdown(tmp_key, -1);
1280
0
                        alcap_tree_from_bearer_key(term_tree, gcp_tvb, pinfo, key);
1281
0
                        g_free(key);
1282
0
                    }
1283
0
                }
1284
0
            }
1285
0
        }
1286
0
    }
1287
0
}
1288
1289
/* END Gateway Control Protocol -- Context Tracking */
1290
1291
28
#define H248_PORT 2945
1292
static bool keep_persistent_data;
1293
static bool h248_desegment = true;
1294
1295
1296
1297
static proto_tree *h248_tree;
1298
1299
static dissector_handle_t h248_handle;
1300
static dissector_handle_t h248_term_handle;
1301
static dissector_handle_t h248_tpkt_handle;
1302
1303
/* Forward declarations */
1304
static unsigned dissect_h248_ServiceChangeReasonStr(bool implicit_tag, tvbuff_t *tvb, unsigned offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
1305
1306
/* h248v1 support */
1307
static unsigned dissect_h248_AuditReplyV1(bool implicit_tag, tvbuff_t *tvb, unsigned offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
1308
1309
static unsigned dissect_h248_EventParameterV1(bool implicit_tag, tvbuff_t *tvb, unsigned offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
1310
static unsigned dissect_h248_SigParameterV1(bool implicit_tag, tvbuff_t *tvb, unsigned offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
1311
static unsigned dissect_h248_SigParamValueV1(bool implicit_tag, tvbuff_t *tvb, unsigned offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index);
1312
1313
#if 0
1314
static const value_string context_id_type[] = {
1315
    {NULL_CONTEXT,"0 (Null Context)"},
1316
    {CHOOSE_CONTEXT,"$ (Choose Context)"},
1317
    {ALL_CONTEXTS,"* (All Contexts)"},
1318
    {0,NULL}
1319
};
1320
#endif
1321
1322
/* the following value_strings are used to build default packages.
1323
   To add additional detail to a package, build a register a h248_package_t structure
1324
 */
1325
1326
static const value_string base_package_name_vals[] = {
1327
    {   0x0000, "Media stream properties H.248.1 Annex C" },
1328
    {   0x0001, "Generic H.248.1 Annex E" },
1329
    {   0x0002, "root H.248.1 Annex E" },
1330
    {   0x0003, "tonegen H.248.1 Annex E" },
1331
    {   0x0004, "tonedet H.248.1 Annex E" },
1332
    {   0x0005, "dg H.248.1 Annex E" },
1333
    {   0x0006, "dd H.248.1 Annex E" },
1334
    {   0x0007, "cg H.248.1 Annex E" },
1335
    {   0x0008, "cd H.248.1 Annex E" },
1336
    {   0x0009, "al H.248.1 Annex E" },
1337
    {   0x000a, "ct H.248.1 Annex E" },
1338
    {   0x000b, "nt H.248.1 Annex E" },
1339
    {   0x000c, "rtp H.248.1 Annex E" },
1340
    {   0x000d, "tdmc H.248.1 Annex E" },
1341
    {   0x000e, "ftmd H.248.1 Annex E" },
1342
    {   0x000f, "txc H.248.2" },                                          /* H.248.2 */
1343
    {   0x0010, "txp H.248.2" },
1344
    {   0x0011, "ctyp H.248.2" },
1345
    {   0x0012, "fax H.248.2" },
1346
    {   0x0013, "ipfax H.248.2" },
1347
    {   0x0014, "dis H.248.3" },                                          /* H.248.3 */
1348
    {   0x0015, "key H.248.3" },
1349
    {   0x0016, "kp H.248.3" },
1350
    {   0x0017, "labelkey H.248.3" },
1351
    {   0x0018, "kf H.248.3" },
1352
    {   0x0019, "ind H.248.3" },
1353
    {   0x001a, "ks H.248.3" },
1354
    {   0x001b, "anci H.248.3" },
1355
    {   0x001c, "dtd H.248.6" },                                              /* H.248.6 */
1356
    {   0x001d, "an H.248.7" },                                               /* H.248.7 */
1357
    {   0x001e, "Bearer Characteristics Q.1950 Annex A" },                    /* Q.1950 Annex A */
1358
    {   0x001f, "Bearer Network Connection Cut Q.1950 Annex A" },
1359
    {   0x0020, "Reuse Idle Q.1950 Annex A" },
1360
    {   0x0021, "Generic Bearer Connection Q.1950 Annex A" },
1361
    {   0x0022, "Bearer Control Tunnelling Q.1950 Annex A" },
1362
    {   0x0023, "Basic Call Progress Tones Q.1950 Annex A" },
1363
    {   0x0024, "Expanded Call Progress Tones Q.1950 Annex A" },
1364
    {   0x0025, "Basic Services Tones Q.1950 Annex A" },
1365
    {   0x0026, "Expanded Services Tones Q.1950 Annex A" },
1366
    {   0x0027, "Intrusion Tones Q.1950 Annex A" },
1367
    {   0x0028, "Business Tones Q.1950 Annex A" },
1368
    {   0x0029, "Media Gateway Resource Congestion Handling H.248.10" },      /* H.248.10 */
1369
    {   0x002a, "H245 package H.248.12" },                                    /* H.248.12 */
1370
    {   0x002b, "H323 bearer control package H.248.12" },                     /* H.248.12 */
1371
    {   0x002c, "H324 package H.248.12" },                                    /* H.248.12 */
1372
    {   0x002d, "H245 command package H.248.12" },                            /* H.248.12 */
1373
    {   0x002e, "H245 indication package H.248.12" },                         /* H.248.12 */
1374
    {   0x002f, "3G User Plane" },                                            /* 3GPP TS 29.232 v4.1.0 */
1375
    {   0x0030, "3G Circuit Switched Data" },
1376
    {   0x0031, "3G TFO Control" },
1377
    {   0x0032, "3G Expanded Call Progress Tones" },
1378
    {   0x0033, "Advanced Audio Server (AAS Base)" },                         /* H.248.9 */
1379
    {   0x0034, "AAS Digit Collection" },                                     /* H.248.9 */
1380
    {   0x0035, "AAS Recording" },                                            /* H.248.9 */
1381
    {   0x0036, "AAS Segment Management" },                                   /* H.248.9 */
1382
    {   0x0037, "Quality Alert Ceasing" },                                    /* H.248.13 */
1383
    {   0x0038, "Conferencing Tones Generation" },                            /* H.248.27 */
1384
    {   0x0039, "Diagnostic Tones Generation" },                              /* H.248.27 */
1385
    {   0x003a, "Carrier Tones Generation Package H.248.23" },                /* H.248.27 */
1386
    {   0x003b, "Enhanced Alerting Package H.248.23" },                       /* H.248.23 */
1387
    {   0x003c, "Analog Display Signalling Package H.248.23" },               /* H.248.23 */
1388
    {   0x003d, "Multi-Frequency Tone Generation Package H.248.24" },         /* H.248.24 */
1389
    {   0x003e, "H.248.23Multi-Frequency Tone Detection Package H.248.24" },  /* H.248.24 */
1390
    {   0x003f, "Basic CAS Package H.248.25" },                               /* H.248.25 */
1391
    {   0x0040, "Robbed Bit Signalling Package H.248.25" },                   /* H.248.25 */
1392
    {   0x0041, "Operator Services and Emergency Services Package H.248.25" },
1393
    {   0x0042, "Operator Services Extension Package H.248.25" },
1394
    {   0x0043, "Extended Analog Line Supervision Package H.248.26" },
1395
    {   0x0044, "Automatic Metering Package H.248.26" },
1396
    {   0x0045, "Inactivity Timer Package H.248.14" },
1397
    {   0x0046, "3G Modification of Link Characteristics Bearer Capability" }, /* 3GPP TS 29.232 v4.4.0 */
1398
    {   0x0047, "Base Announcement Syntax H.248.9" },
1399
    {   0x0048, "Voice Variable Syntax H.248.9" },
1400
    {   0x0049, "Announcement Set Syntax H.248.9" },
1401
    {   0x004a, "Phrase Variable Syntax H.248.9" },
1402
    {   0x004b, "Basic NAS package" },
1403
    {   0x004c, "NAS incoming package" },
1404
    {   0x004d, "NAS outgoing package" },
1405
    {   0x004e, "NAS control package" },
1406
    {   0x004f, "NAS root package" },
1407
    {   0x0050, "Profile Handling Package H.248.18" },
1408
    {   0x0051, "Media Gateway Overload Control Package H.248.11" },
1409
    {   0x0052, "Extended DTMF Detection Package H.248.16" },
1410
    {   0x0053, "Quiet Termination Line Test" },
1411
    {   0x0054, "Loopback Line Test Response" },                              /* H.248.17 */
1412
    {   0x0055, "ITU 404Hz Line Test" },                                      /* H.248.17 */
1413
    {   0x0056, "ITU 816Hz Line Test" },                                      /* H.248.17 */
1414
    {   0x0057, "ITU 1020Hz Line Test" },                                     /* H.248.17 */
1415
    {   0x0058, "ITU 2100Hz Disable Tone Line Test" },                        /* H.248.17 */
1416
    {   0x0059, "ITU 2100Hz Disable Echo Canceller Tone Line Test" },         /* H.248.17 */
1417
    {   0x005a, "ITU 2804Hz Tone Line Test" },                                /* H.248.17 */
1418
    {   0x005b, "ITU Noise Test Tone Line Test" },                            /* H.248.17 */
1419
    {   0x005c, "ITU Digital Pseudo Random Test Line Test" },                 /* H.248.17 */
1420
    {   0x005d, "ITU ATME No.2 Test Line Response" },                         /* H.248.17 */
1421
    {   0x005e, "ANSI 1004Hz Test Tone Line Test" },                          /* H.248.17 */
1422
    {   0x005f, "ANSI Test Responder Line Test" },                            /* H.248.17 */
1423
    {   0x0060, "ANSI 2225Hz Test Progress Tone Line Test" },                 /* H.248.17 */
1424
    {   0x0061, "ANSI Digital Test Signal Line Test" },                       /* H.248.17 */
1425
    {   0x0062, "ANSI Inverting Loopback Line Test Response" },               /* H.248.17 */
1426
    {   0x0063, "Extended H.324 Packages H.248.12 Annex A" },
1427
    {   0x0064, "Extended H.245 Command Package H.248.12 Annex A" },
1428
    {   0x0065, "Extended H.245 Indication Package H.248.12 Annex A" },
1429
    {   0x0066, "Enhanced DTMF Detection Package H.248.16" },
1430
    {   0x0067, "Connection Group Identity Package Q.1950 Annex E" },
1431
    {   0x0068, "CTM Text Transport 3GPP TS 29.232 v5.2.0" },
1432
    {   0x0069, "SPNE Control Package Q.115.0" },
1433
    {   0x006a, "Semi-permanent Connection Package H.248.21" },
1434
    {   0x006b, "Shared Risk Group Package H.248.22" },
1435
    {   0x006c, "isuptn Annex B of ITU-T Rec. J.171" },
1436
    {   0x006d, "Basic CAS Addressing Package H.248.25" },
1437
    {   0x006e, "Floor Control Package H.248.19" },
1438
    {   0x006f, "Indication of Being Viewed Package H.248.19" },
1439
    {   0x0070, "Volume Control Package H.248.19" },
1440
    {   0x0071, "UNASSIGNED" },
1441
    {   0x0072, "Volume Detection Package H.248.19" },
1442
    {   0x0073, "Volume Level Mixing Package H.248.19" },
1443
    {   0x0074, "Mixing Volume Level Control Package H.248.19" },
1444
    {   0x0075, "Voice Activated Video Switch Package H.248.19" },
1445
    {   0x0076, "Lecture Video Mode Package H.248.19" },
1446
    {   0x0077, "Contributing Video Source Package H.248.19" },
1447
    {   0x0078, "Video Window Package H.248.19" },
1448
    {   0x0079, "Tiled Window Package H.248.19" },
1449
    {   0x007a, "Adaptive Jitter Buffer Package H.248.31" },
1450
    {   0x007b, "International CAS Package H.248.28" },
1451
    {   0x007c, "CAS Blocking Package H.248.28" },
1452
    {   0x007d, "International CAS Compelled Package H.248.29" },
1453
    {   0x007e, "International CAS Compelled with Overlap Package H.248.29" },
1454
    {   0x007f, "International CAS Compelled with End-to-end Package H.248.29" },
1455
    {   0x0080, "RTCP XR Package H.248.30" },
1456
    {   0x0081, "RTCP XR Burst Metrics Package H.248.30" },
1457
    {   0x0082, "threegcsden 3G Circuit Switched Data" },                     /* 3GPP TS 29.232 v5.6.0 */
1458
    {   0x0083, "threegiptra 3G Circuit Switched Data" },                     /* 3GPP TS 29.232 v5.6.0 */
1459
    {   0x0084, "threegflex 3G Circuit Switched Data" },                      /* 3GPP TS 29.232 v5.6.0 */
1460
    {   0x0085, "H.248 PCMSB" },
1461
    {   0x008a, "TIPHON Extended H.248/MEGACO Package" },                     /* ETSI specification TS 101 3 */
1462
    {   0x008b, "Differentiated Services Package" },                          /* Annex A of ETSI TS 102 333 */
1463
    {   0x008c, "Gate Management Package" },                                  /* Annex B of ETSI TS 102 333 */
1464
    {   0x008d, "Traffic Management Package" },                               /* Annex C of ETSI TS 102 333 */
1465
    {   0x008e, "Gate Recovery Information Package" },                        /* Annex D of ETSI TS 102 333 */
1466
    {   0x008f, "NAT Traversal Package" },                                    /* Annex E of ETSI TS 102 333 */
1467
    {   0x0090, "MPLS Package" },                                             /* Annex F of ETSI TS 102 333 */
1468
    {   0x0091, "VLAN Package" },                                             /* Annex G of ETSI TS 102 333 */
1469
    {   0x0092, "Detailed Congestion Reporting Package" },                    /* H.248.32 */
1470
    {   0x0093, "Stimulus Analogue Lines Package" },                          /* H.248.34 */
1471
    {   0x0094, "icascgen" },                                                 /* H.248.29 Annex B */
1472
    {   0x0095, "Coin Operated Phone Control Package" },                      /* H.248.35 */
1473
    {   0x0096, "Metering Pulse Detection Package" },                         /* H.248.26 Amendment 1 */
1474
    {   0x0097, "Trace Package" },                                            /* 3GPP TS 29.232 v6.3.0 */
1475
    {   0x0098, "Hanging Termination Package" },                              /* H.248.36 */
1476
    {   0x0099, "IP NAPT Traversal Package" },                                /* H.248.37 */
1477
    {   0x009a, "Notification Behaviour Package" },                           /* H.248.1v3 */
1478
    {   0x009b, "Base Context Package" },                                     /* H.248.38 */
1479
    {   0x009c, "Application Data Inactivity Detection Package" },            /* H.248.40 */
1480
    {   0x009d, "Domain Connection Package " },                               /* H.248.41 */
1481
    {   0x009e, "Digital Circuit Multiplication Equipment Package" },         /* H.248.42 */
1482
    {   0x009f, "Multi-level Precedence and Pre-emption Package" },           /* H.248.44 */
1483
    {   0x00a0, "MGC Information Package" },                                  /* H.248.45 */
1484
    {   0x00a1, "Text Overlay Package" },                                     /* H.248.19 Amendment 1 */
1485
    {   0x00a2, "Border and Background Package" },                            /* H.248.19 Amendment 1 */
1486
    {   0x00a3, "Segmentation Package" },                                     /* H.248.1v3 */
1487
    {   0x00a4, "ETSI notification behaviour package" },                      /* ETSI ES 283 039-3 */
1488
    {   0x00a5, "ETSI notification rate package" },                           /* ETSI ES 283 039-4 */
1489
    {   0x00a6, "Automatic Speech Recognition Package" },                     /* H.248.9 Amendment 1 */
1490
    {   0x00a7, "Set extension to basic syntax for TTS enhancement Package" },/* H.248.9 Amendment 1 */
1491
    {   0x00a8, "Advanced audio server base package for TTS enhancement" },   /* H.248.9 Amendment 1 */
1492
    {   0x00a9, "Multimedia Play Package" },                                  /* H.248.9 Amendment 1 */
1493
    {   0x00aa, "Floor Status Detection Package" },                           /* H.248.19 Amendment 2 */
1494
    {   0x00ab, "Floor Control Policy Package" },                             /* H.248.19 Amendment 2 */
1495
    {   0x00ac, "Address Reporting Package" },                                /* H.248.37 Amendment 1 */
1496
    {   0x00ad, "Connection Capability Control Package" },                    /* H.248.46 */
1497
    {   0x00ae, "Statistic Conditional Reporting Package" },                  /* H.248.47 Amendment 1 */
1498
    {   0x00af, "RTCP HR QoS Statistics Package" },                           /* H.248.48 */
1499
    {   0x00b0, "Received RTCP XR Package" },                                 /* H.248.30 (01/2007) */
1500
    {   0x00b1, "Received RTCP XR Burst Metrics Package" },                   /* H.248.30 (01/2007) */
1501
    {   0x00b2, "ASCI Group call package" },                                  /* 3GPP TS 29.232 v7.4.0 */
1502
    {   0x00b3, "Multimedia Recording Package" },                             /* H.248.9 Amendment 1 */
1503
    {   0x00b4, "H.245 Transport Package" },                                  /* H.248.12 Amendment 2 */
1504
    {   0x00b5, "RTCP Handling package" },                                    /* H.248.57 */
1505
    {   0x00b6, "Gate Management - Outgoing Destination Address/Port Filtering Package" },/* H.248.43 */
1506
    {   0x00b7, "Gate Management - Incoming Protocol Filtering Package" },    /* H.248.43 */
1507
    {   0x00b8, "Gate Management - Outgoing Protocol Filtering Package" },    /* H.248.43 */
1508
    {   0x00b9, "Gate Management - Incoming Filtering Behaviour Package" },   /* H.248.43 */
1509
    {   0x00ba, "Gate Management - Outgoing Filtering Behaviour Package" },   /* H.248.43 */
1510
    {   0x00bb, "Session Description Protocol RFC Package" },                 /* H.248.49 */
1511
    {   0x00bc, "Session Description Protocol Capabilities Package" },        /* H.248.49 */
1512
    {   0x00bd, "NAT Traversal Toolkit - STUN Base Package" },                /* H.248.50 */
1513
    {   0x00be, "NAT Traversal Toolkit - MG STUN Client Package" },           /* H.248.50 */
1514
    {   0x00bf, "NAT Traversal Toolkit - MG TURN Client Package" },           /* H.248.50 */
1515
    {   0x00c0, "NAT Traversal Toolkit - MGC STUN Client Package" },          /* H.248.50 */
1516
    {   0x00c1, "NAT Traversal Toolkit - STUN Information Package" },         /* H.248.50 */
1517
    {   0x00c2, "NAT Traversal Toolkit - MG Act-as STUN Server Package" },    /* H.248.50 */
1518
    {   0x00c3, "NAT Traversal Toolkit - Originate STUN Continuity Check Package" },  /* H.248.50 */
1519
    {   0x00c4, "NAT Traversal Toolkit - MGC Originated STUN Request Package" },      /* H.248.50 */
1520
    {   0x00c5, "NAT Traversal Toolkit - RTP NOOP Request Package" },         /* H.248.50 */
1521
    {   0x00c6, "Termination Connection Model Package" },                     /* H.248.51 */
1522
    {   0x00c7, "QoS Class Package" },                                        /* H.248.52 */
1523
    {   0x00c8, "Traffic Policing Statistics Package" },                      /* H.248.53 */
1524
    {   0x00c9, "Packet Size Package" },                                      /* H.248.53 */
1525
    {   0x00ca, "Pull Mode Package" },                                        /* H.248.55 */
1526
    {   0x00cb, "RTP Application Data Package" },                             /* H.248.58 */
1527
    {   0x00cc, "Event Timestamp Notification Package" },                     /* H.248.59 */
1528
    {   0x00cd, "Resource Management Rules Package" },                        /* H.248.63 */
1529
    {   0x00ce, "Resource Management Configuration Package" },                /* H.248.63 */
1530
    {   0x00cf, "Abstract Resource Management Packages" },                    /* H.248.63 */
1531
    {   0x00d0, "IP layer octets count statistics Package" },                 /* H.248.61 */
1532
    {   0x00d1, "Content of Communication Identity Package" },                /* H.248.60 */
1533
    {   0x00d2, "RSVP extension package" },                                   /* H.248.65 */
1534
    {   0x00d3, "GCP Transport Mode Indication Package" },                    /* H.248.67 */
1535
    {   0x00d4, "IP Router Package" },                                        /* H.248.64 */
1536
    {   0x00d5, "Media Resource Identification Package" },                    /* H.248.66 */
1537
    {   0x00d6, "Range Format Support Package" },                             /* H.248.66 */
1538
    {   0x00d7, "Media Resource Description Expiry Package" },                /* H.248.66 */
1539
    {   0x00d8, "Media Block Size Package" },                                 /* H.248.66 */
1540
    {   0x00d9, "RTSP Media Resource Syntax Package" },                       /* H.248.66 */
1541
    {   0x00da, "RTSP Play Package" },                                        /* H.248.66 */
1542
    {   0x00db, "Signal Pause Package" },                                     /* H.248.66 */
1543
    {   0x00dc, "Data Delivery Speed Adjustme Package" },                     /* H.248.66 */
1544
    {   0x00dd, "Playback Relative Scale Adjustment Package" },               /* H.248.66 */
1545
    {   0x00de, "RTP Information Package" },                                  /* H.248.66 */
1546
    {   0x00df, "RTP Interleaving Package" },                                 /* H.248.66 */
1547
    {   0x00e0, "IP Realm Availability Package" },                            /* H.248.41 Amendment 1 */
1548
    {   0x00e1, "General IP Header QoS Octet Package" },                      /* H.248.52  */
1549
    {   0x00e2, "Re-answer Package" },                                        /* H.248.62  */
1550
    {   0x00e3, "3G Interface Type package" },                                /* 3GPP TS 29.232 v8.4.0 */
1551
    {   0x00e4, "Latch Statistics Package" },                                 /* H.248.37 */
1552
    {   0x00e5, "Floor Control Signalling Package" },                         /* H.248.19 Amendment 2 */
1553
    {   0x00e6, "Include Participant in Mix Package" },                       /* H.248.19 Amendment 2 */
1554
    {   0x00e7, "Speaker Reporting Package" },                                /* H.248.19 Amendment 2 */
1555
    {   0x00e8, "IP Layer Packet Count Statistics Package" },                 /* H.248.61 */
1556
    {   0x00e9, "Removal of Digits and Tones Package" },                      /* H.248.68 */
1557
    {   0x00ea, "MSRP Statistics Package" },                                  /* H.248.69 */
1558
    {   0x00eb, "MSRP Connection Status Package" },                           /* H.248.69 */
1559
    {   0x00ec, "Play Message Package" },                                     /* H.248.69 */
1560
    {   0x00ed, "Delete Stored Message Package" },                            /* H.248.69 */
1561
    {   0x00ee, "Message Session Information Package" },                      /* H.248.69 */
1562
    {   0x00ef, "Message Filtering Package" },                                /* H.248.69 */
1563
    {   0x00f0, "Stored Message Information Package" },                       /* H.248.69 */
1564
    {   0x00f1, "Record Message Package" },                                   /* H.248.69 */
1565
    {   0x00f2, "Digit Dialling Method Information Package" },                /* H.248.70 */
1566
    {   0x00f3, "Digit Dialling Method Information for Extended Digitmap Detection Package" }, /* H.248.70 */
1567
    {   0x00f4, "Digit Dialling Method Information for Enhanced Digitmap Detection Package" }, /* H.248.70 */
1568
    {   0x00f5, "Received RTCP Package " },                                   /* H.248.71 */
1569
    {   0x00f6, "RTP Cumulative Loss Package" },                              /* H.248.71 */
1570
    {   0x00f7, "H.245 Transport Package for SPC use" },                      /* H.248.72 */
1571
    {   0x00f8, "MONA Preference Package" },                                  /* H.248.72 */
1572
    {   0x00f9, "TDM Gain Control Package" },                                 /* H.248.73 */
1573
    {   0x00fa, "Media Start Package" },                                      /* H.248.74 */
1574
    {   0x00fb, "Trim Package" },                                             /* H.248.74 */
1575
    {   0x00fc, "Enhanced Recording Package" },                               /* H.248.74 */
1576
    {   0x00fd, "Enhanced ASR Package" },                                     /* H.248.74      */
1577
    {   0x00fe, "Enhanced TTS Package" },                                     /* H.248.74 */
1578
    {   0x00ff, "Play Offset Control Package" },                              /* H.248.74 */
1579
    {   0x0100, "Enhanced DTMF Detection Package" },                          /* H.248.9 Revised 2009 */
1580
    {   0x0101, "IP Router NAT Package" },                                    /* H.248.64 */
1581
    {   0x0102, "Voice Enrolled Grammar Package" },                           /* H.248.74 */
1582
    {   0x0103, "Filter Group Package" },                                     /* H.248.76 */
1583
    {   0x0104, "RTCP Source Description Package" },                          /* H.248.71 */
1584
    {   0x0105, "Speaker Verification and Identification Package" },          /* H.248.74 */
1585
    {   0x0106, "Package Identifier Publishing and Application Package" },    /* H.248 */
1586
    {   0x0107, "Secure RTP Package " },                                      /* H.248.77 */
1587
    {   0x0108, "MGC Controlled Bearer Level ALG Package" },                  /* H.248.78 */
1588
    {   0x0109, "Enhanced Revised Offer/Answer SDP Support Package" },        /* H.248.80 */
1589
    {   0x010a, "Enhanced SDP Media Capabilities Negotiation Support Package" }, /* H.248.80 */
1590
    {   0x8000, "Ericsson IU" },
1591
    {   0x8001, "Ericsson UMTS and GSM Circuit" },
1592
    {   0x8002, "Ericsson Tone Generator Package" },
1593
    {   0x8003, "Ericsson Line Test Package" },
1594
    {   0x8004, "Nokia Advanced TFO Package" },
1595
    {   0x8005, "Nokia IWF Package" },
1596
    {   0x8006, "Nokia Root Package" },
1597
    {   0x8007, "Nokia Trace Package" },
1598
    {   0x8008, "Ericsson  V5.2 Layer" },
1599
    {   0x8009, "Ericsson Detailed Termination Information Package" },
1600
    {   0x800a, "Nokia Bearer Characteristics Package" },
1601
    {   0x800b, "Nokia Test Call Package" },
1602
    {   0x800c, "Nokia Extended Continuity Package" },
1603
    {   0x800d, "Nokia IPnwR Package" },
1604
    {   0x800e, "Ericsson Tracing Enhancements Package" },
1605
    {   0x800f, "Ericsson Partially Wildcarded TerminationID Package" },
1606
    {   0x8010, "SCTP Stream Handling Package" },
1607
    {0,     NULL}
1608
};
1609
1610
/*
1611
 * This table consist of PackageName + EventName and its corresponding string
1612
 *
1613
 */
1614
static const value_string base_event_name_vals[] = {
1615
    {   0x00000000, "Media stream properties H.248.1 Annex C" },
1616
    {   0x00010000, "g H.248.1 Annex E" },
1617
    {   0x00010001, "g/Cause" },
1618
    {   0x00010002, "g/Signal Completion" },
1619
    {   0x00040000, "tonedet H.248.1 Annex E" },
1620
    {   0x00040001, "tonedet/std(Start tone detected)" },
1621
    {   0x00040002, "tonedet/etd(End tone detected)" },
1622
    {   0x00040003, "tonedet/ltd(Long tone detected)" },
1623
    {   0x00060000, "dd H.248.1 Annex E" },
1624
    {   0x00060001, "dd/std" },
1625
    {   0x00060002, "dd/etd" },
1626
    {   0x00060003, "dd/ltd" },
1627
    {   0x00060004, "dd, DigitMap Completion Event" },
1628
    {   0x00060010, "dd/d0, DTMF character 0" },
1629
    {   0x00060011, "dd/d1, DTMF character 1" },
1630
    {   0x00060012, "dd/d2, DTMF character 2" },
1631
    {   0x00060013, "dd/d3, DTMF character 3" },
1632
    {   0x00060014, "dd/d4, DTMF character 4" },
1633
    {   0x00060015, "dd/d5, DTMF character 5" },
1634
    {   0x00060016, "dd/d6, DTMF character 6" },
1635
    {   0x00060017, "dd/d7, DTMF character 7" },
1636
    {   0x00060018, "dd/d8, DTMF character 8" },
1637
    {   0x00060019, "dd/d9, DTMF character 9" },
1638
    {   0x0006001a, "dd/a, DTMF character A" },
1639
    {   0x0006001b, "dd/b, DTMF character B" },
1640
    {   0x0006001c, "dd/c, DTMF character C" },
1641
    {   0x0006001d, "dd/d, DTMF character D" },
1642
    {   0x00060020, "dd/" "*, DTMF character *" },   /* XXX: hack so checkAPIs & etc won't see a 'start of comment' */
1643
    {   0x00060021, "dd/#, DTMF character #" },
1644
    {   0x00080030, "cd, Dial Tone" },
1645
    {   0x00080031, "cd, Ringing Tone" },
1646
    {   0x00080032, "cd, Busy Tone" },
1647
    {   0x00080033, "cd, Congestion Tone" },
1648
    {   0x00080034, "cd, Special Information Tone" },
1649
    {   0x00080035, "cd, (Recording) Warning Tone" },
1650
    {   0x00080036, "cd, Payphone Recognition Tone" },
1651
    {   0x00080037, "cd, Call Waiting Tone" },
1652
    {   0x00080038, "cd, Caller Waiting Tone" },
1653
    {   0x00090004, "al, onhook" },
1654
    {   0x00090005, "al, offhook" },
1655
    {   0x00090006, "al, flashhook" },
1656
    {   0x0009ffff, "al, *" },
1657
    {   0x000a0005, "ct, Completion of Continuity test" },
1658
    {   0x000b0005, "nt, network failure" },
1659
    {   0x000b0006, "nt, quality alert" },
1660
    {   0x000c0001, "rtp, Payload Transition" },
1661
    {   0x00210000, "Generic Bearer Connection Q.1950 Annex A" },
1662
    {   0x00210001, "GB/BNCChange" },
1663
    {   0x00220001, "BT/TIND (Tunnel Indication)" },
1664
    {   0x002a0001, "H.245/h245msg (Incoming H.245 Message)" },
1665
    {   0x002a0004, "H.245/h245ChC (H.245 Channel Closed)" },
1666
    {   0x00450000, "Inactivity Timer H.248.14" },
1667
    {   0x00450001, "it/ito" },
1668
    {   0x00450002, "it/ito" },
1669
    {   0x00460001, "threegmlc/mod_link_supp (Bearer Modification Support Event)" },
1670
    {   0x00980000, "Hanging Termination Package" },
1671
    {   0x00980001, "Termination Heartbeat" },
1672
    {   0x800a0000, "Nokia Bearer Characteristics Package" },
1673
    {0,     NULL}
1674
};
1675
1676
/*
1677
 * This table consist of PackageName + SignalName and its corresponding string
1678
 */
1679
static const value_string base_signal_name_vals[] = {
1680
    {   0x00000000, "Media stream properties H.248.1 Annex C" },
1681
    {   0x00010000, "g H.248.1 Annex E" },
1682
    {   0x00030001, "tonegen/pt(Play tone)" },
1683
    {   0x00050010, "dg, DTMF character 0" },
1684
    {   0x00050011, "dg, DTMF character 1" },
1685
    {   0x00050012, "dg, DTMF character 2" },
1686
    {   0x00050013, "dg, DTMF character 3" },
1687
    {   0x00050014, "dg, DTMF character 4" },
1688
    {   0x00050015, "dg, DTMF character 5" },
1689
    {   0x00050016, "dg, DTMF character 6" },
1690
    {   0x00050017, "dg, DTMF character 7" },
1691
    {   0x00050018, "dg, DTMF character 8" },
1692
    {   0x00050019, "dg, DTMF character 9" },
1693
    {   0x0005001a, "dg, DTMF character A" },
1694
    {   0x0005001b, "dg, DTMF character B" },
1695
    {   0x0005001c, "dg, DTMF character C" },
1696
    {   0x0005001d, "dg, DTMF character D" },
1697
    {   0x00050020, "dg, DTMF character *" },
1698
    {   0x00050021, "dg, DTMF character #" },
1699
    {   0x00070030, "cg, Dial Tone" },
1700
    {   0x00070031, "cg/rt (Ringing Tone)" },
1701
    {   0x00070032, "cg, Busy Tone" },
1702
    {   0x00070033, "cg, Congestion Tone" },
1703
    {   0x00070034, "cg, Special Information Tone" },
1704
    {   0x00070035, "cg, (Recording) Warning Tone" },
1705
    {   0x00070036, "cg, Payphone Recognition Tone" },
1706
    {   0x00070037, "cg, Call Waiting Tone" },
1707
    {   0x00070038, "cg, Caller Waiting Tone" },
1708
    {   0x00090002, "al, ring" },
1709
    {   0x0009ffff, "al, *" },
1710
    {   0x000a0003, "ct, Continuity test" },
1711
    {   0x000a0004, "ct, Continuity respond" },
1712
    {   0x00210000, "GB Generic Bearer Connection Q.1950 Annex A" },
1713
    {   0x00210001, "GB/EstBNC(Establish BNC)" },
1714
    {   0x00210002, "GB/ModBNC (Modify BNC)" },
1715
    {   0x00210003, "GB/RelBNC(Release BNC)" },
1716
    {   0x002a0001, "H.245/cs (channel state)" },
1717
    {   0x002a0002, "H.245/termtype (Terminal Type)" },
1718
    {   0x002c0001, "H.324/cmod (Communication mode)" },
1719
    {   0x002c0002, "H.324/muxlv (Highest Multiplexing level)" },
1720
    {   0x002c0003, "H.324/demux (Demultiplex)" },
1721
    {   0x002c0004, "H.324/h223capr (Remote H.223 capability)" },
1722
    {   0x002c0005, "H.324/muxtbl_in (Incoming Multiplex Table)" },
1723
    {   0x002c0006, "H.324/muxtbl_out (Outgoing Multiplex Table)" },
1724
    {   0x800a0000, "Nokia Bearer Characteristics Package" },
1725
    {0,     NULL}
1726
};
1727
1728
1729
static const value_string h248_reasons[] = {
1730
    { 400, "Syntax error in message"},
1731
    { 401, "Protocol Error"},
1732
    { 402, "Unauthorized"},
1733
    { 403, "Syntax error in transaction request"},
1734
    { 406, "Version Not Supported"},
1735
    { 410, "Incorrect identifier"},
1736
    { 411, "The transaction refers to an unknown ContextId"},
1737
    { 412, "No ContextIDs available"},
1738
    { 413, "Number of transactions in message exceeds maximum"},    /* [H.248.8 (08/07)] */
1739
    { 421, "Unknown action or illegal combination of actions"},
1740
    { 422, "Syntax Error in Action"},
1741
    { 430, "Unknown TerminationID"},
1742
    { 431, "No TerminationID matched a wildcard"},
1743
    { 432, "Out of TerminationIDs or No TerminationID available"},
1744
    { 433, "TerminationID is already in a Context"},
1745
    { 434, "Max number of Terminations in a Context exceeded"},
1746
    { 435, "Termination ID is not in specified Context"},
1747
    { 440, "Unsupported or unknown Package"},
1748
    { 441, "Missing Remote or Local Descriptor"},
1749
    { 442, "Syntax Error in Command"},
1750
    { 443, "Unsupported or Unknown Command"},
1751
    { 444, "Unsupported or Unknown Descriptor"},
1752
    { 445, "Unsupported or Unknown Property"},
1753
    { 446, "Unsupported or Unknown Parameter"},
1754
    { 447, "Descriptor not legal in this command"},
1755
    { 448, "Descriptor appears twice in a command"},
1756
    { 449, "Unsupported or Unknown Parameter or Property Value"},
1757
    { 450, "No such property in this package"},
1758
    { 451, "No such event in this package"},
1759
    { 452, "No such signal in this package"},
1760
    { 453, "No such statistic in this package"},
1761
    { 454, "No such parameter value in this package"},
1762
    { 455, "Property illegal in this Descriptor"},
1763
    { 456, "Property appears twice in this Descriptor"},
1764
    { 457, "Missing parameter in signal or event"},
1765
    { 458, "Unexpected Event/Request ID"},
1766
    { 459, "Unsupported or Unknown Profile"},
1767
    { 460, "Unable to set statistic on stream"},
1768
    { 461, "Unsupported or Unknown Profile"},                               /*[H.248.18] */
1769
1770
    { 471, "Implied Add for Multiplex failure"},
1771
    { 472, "Required Information Missing"},                                 /*[H.248.8 (08/07)] */
1772
    { 473, "Conflicting Property Values"},                                  /*[H.248.8 (08/07)] */
1773
    { 474, "Invalid SDP Syntax"},                                           /*[H.248.49] */
1774
    { 475, "Unable to pause the playout of the signal"},                    /*[H.248.66] */
1775
    { 476, "Unable to adjust the data delivery speed of the Signal"},       /*[H.248.66] */
1776
1777
    { 477, "Unable to adjust the playback relative scale of the signal"},   /*[H.248.66] */
1778
1779
    { 478, "Behaviour Contradicts Resource Rule"},                          /*[H.248.63] */
1780
1781
    { 500, "Internal software Failure in MG"},
1782
    { 501, "Not Implemented"},
1783
    { 502, "Not ready"},
1784
    { 503, "Service Unavailable"},
1785
    { 504, "Command Received from unauthorized entity"},
1786
    { 505, "Transaction Request Received before a Service Change Reply has been received"},
1787
    { 506, "Number of Transaction Pendings Exceeded"},
1788
    { 510, "Insufficient resources"},
1789
    { 511, "Temporarily Busy"},                                     /* [H.248.8 (08/07)] */
1790
    { 512, "Media Gateway unequipped to detect requested Event"},
1791
    { 513, "Media Gateway unequipped to generate requested Signals"},
1792
    { 514, "Media Gateway cannot send the specified announcement"},
1793
    { 515, "Unsupported Media Type"},
1794
    { 517, "Unsupported or invalid mode"},
1795
    { 518, "Event buffer full"},
1796
    { 519, "Out of space to store digit map"},
1797
    { 520, "Digit Map undefined in the MG"},
1798
    { 521, "Termination is ServiceChanging"},
1799
    { 522, "Functionality Requested in Topology Triple Not Supported"},
1800
    { 526, "Insufficient bandwidth"},
1801
    { 529, "Internal hardware failure in MG"},
1802
    { 530, "Temporary Network failure"},
1803
    { 531, "Permanent Network failure"},
1804
    { 532, "Audited Property, Statistic, Event or Signal does not exist"},
1805
    { 533, "Response exceeds maximum transport PDU size"},
1806
    { 534, "Illegal write or read only property"},
1807
    { 540, "Unexpected initial hook state"},
1808
    { 541, "Unexpected Spare Bit State"},                               /* [H.248.33] */
1809
    { 542, "Command is not allowed on this termination"},
1810
    { 543, "MGC requested event detection timestamp not supported"},    /* [H.248.8 (08/07)] */
1811
    { 581, "Does Not Exist"},
1812
    { 600, "Illegal syntax within an announcement specification"},
1813
    { 601, "Variable type not supported"},
1814
    { 602, "Variable value out of range"},
1815
    { 603, "Category not supported"},
1816
    { 604, "Selector type not supported"},
1817
    { 605, "Selector value not supported"},
1818
    { 606, "Unknown segment ID"},
1819
    { 607, "Mismatch between play specification and provisioned data"},
1820
    { 608, "Provisioning error"},
1821
    { 609, "Invalid offset"},
1822
    { 610, "No free segment IDs"},
1823
    { 611, "Temporary segment not found"},
1824
    { 612, "Segment in use"},
1825
    { 613, "ISP port limit overrun"},
1826
    { 614, "No modems available"},
1827
    { 615, "Calling number unacceptable"},
1828
    { 616, "Called number unacceptable"},
1829
    { 617, "Reserved for H.248.9 return code"},     /* [H.248.9] */
1830
    { 618, "Reserved for H.248.9 return code"},     /* [H.248.9] */
1831
    { 622, "Reserved for H.248.9 return code"},     /* [H.248.9] */
1832
    { 623, "Reserved for H.248.9 return code"},     /* [H.248.9] */
1833
    { 624, "Reserved for H.248.9 return code"},     /* [H.248.9] */
1834
    { 625, "Reserved for H.248.9 return code"},     /* [H.248.9 Amendment 1] */
1835
    { 626, "Reserved for H.248.9 return code"},     /* [H.248.9 Amendment 1] */
1836
    { 627, "Reserved for H.248.9 return code"},     /* [H.248.9 Amendment 1] */
1837
    { 628, "Reserved for H.248.9 return code"},     /* [H.248.9 Amendment 1] */
1838
    { 629, "Reserved for H.248.9 return code"},     /* [H.248.9 Amendment 1] */
1839
    { 700, "Sieve Script Syntax Error"},            /* [H.248.69] */
1840
    { 701, "Unsupported Sieve Require Error"},      /* [H.248.69] */
1841
    { 702, "Sieve Actions Exceeded Error"},         /* [H.248.69] */
1842
1843
    { 900, "Service Restored"},
1844
    { 901, "Cold Boot"},
1845
    { 902, "Warm Boot"},
1846
    { 903, "MGC Directed Change"},
1847
    { 904, "Termination malfunctioning"},
1848
    { 905, "Termination taken out of service"},
1849
    { 906, "Loss of lower layer connectivity (e.g. downstream sync)"},
1850
    { 907, "Transmission Failure"},
1851
    { 908, "MG Impending Failure"},
1852
    { 909, "MGC Impending Failure"},
1853
    { 910, "Media Capability Failure"},
1854
    { 911, "Modem Capability Failure"},
1855
    { 912, "Mux Capability Failure"},
1856
    { 913, "Signal Capability Failure"},
1857
    { 914, "Event Capability Failure"},
1858
    { 915, "State Loss"},
1859
    { 916, "Packages Change"},
1860
    { 917, "Capabilities Change"},
1861
    { 918, "Cancel Graceful"},
1862
    { 919, "Warm Failover"},
1863
    { 920, "Cold Failover"},
1864
    {0,NULL}
1865
};
1866
static value_string_ext h248_reasons_ext = VALUE_STRING_EXT_INIT(h248_reasons);
1867
1868
static const value_string wildcard_modes[] = {
1869
    { 0, "Choose" },
1870
    { 1, "All" },
1871
    { 0, NULL }
1872
};
1873
1874
static const value_string wildcard_levels[] = {
1875
    { 0, "This One Level" },
1876
    { 1, "This Level and those below" },
1877
    { 0, NULL }
1878
};
1879
1880
static h248_curr_info_t curr_info;
1881
static uint32_t error_code;
1882
static uint32_t h248_version; /* h248v1 support */
1883
static gcp_wildcard_t wild_term;
1884
static uint8_t wild_card = 0xFF; /* place to store wildcardField */
1885
1886
                                /* Call the export PDU tap with relevant data */
1887
static void
1888
export_h248_pdu(packet_info *pinfo, tvbuff_t *tvb)
1889
14
{
1890
14
    if (have_tap_listener(exported_pdu_tap)) {
1891
0
        exp_pdu_data_t *exp_pdu_data = export_pdu_create_common_tags(pinfo, "h248", EXP_PDU_TAG_DISSECTOR_NAME);
1892
1893
0
        exp_pdu_data->tvb_captured_length = tvb_captured_length(tvb);
1894
0
        exp_pdu_data->tvb_reported_length = tvb_reported_length(tvb);
1895
0
        exp_pdu_data->pdu_tvb = tvb;
1896
1897
0
        tap_queue_packet(exported_pdu_tap, pinfo, exp_pdu_data);
1898
0
    }
1899
14
}
1900
1901
0
extern void h248_param_ber_integer(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo, int hfid, h248_curr_info_t* u _U_, void* implicit) {
1902
0
    asn1_ctx_t asn1_ctx;
1903
0
    asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1904
0
    dissect_ber_integer(implicit ? *((bool*)implicit) : false, &asn1_ctx, tree, tvb, 0, hfid, NULL);
1905
0
}
1906
1907
0
extern void h248_param_ber_octetstring(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo, int hfid, h248_curr_info_t* u _U_, void* implicit) {
1908
0
    asn1_ctx_t asn1_ctx;
1909
0
    asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1910
0
    dissect_ber_octet_string(implicit ? *((bool*)implicit) : false, &asn1_ctx, tree, tvb, 0, hfid, NULL);
1911
0
}
1912
1913
0
extern void h248_param_ber_boolean(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo, int hfid, h248_curr_info_t* u _U_, void* implicit) {
1914
0
    asn1_ctx_t asn1_ctx;
1915
0
    asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1916
0
    dissect_ber_boolean(implicit ? *((bool*)implicit) : false, &asn1_ctx, tree, tvb, 0, hfid, NULL);
1917
0
}
1918
1919
extern void h248_param_bytes_item(proto_tree* tree,
1920
                             tvbuff_t* tvb,
1921
                             packet_info* pinfo _U_,
1922
                             int hfid,
1923
                             h248_curr_info_t* h248_info _U_,
1924
0
                             void* lenp ) {
1925
0
    int len = lenp ? *((int*)lenp) : -1;
1926
0
    proto_tree_add_item(tree,hfid,tvb,0,len,ENC_NA);
1927
0
}
1928
1929
extern void h248_param_uint_item(proto_tree* tree,
1930
                                 tvbuff_t* tvb,
1931
                                 packet_info* pinfo _U_,
1932
                                 int hfid,
1933
                                 h248_curr_info_t* h248_info _U_,
1934
0
                                 void* lenp ) {
1935
0
    int len = lenp ? *((int*)lenp) : -1;
1936
0
    proto_tree_add_item(tree,hfid,tvb,0,len,ENC_BIG_ENDIAN);
1937
0
}
1938
1939
0
extern void h248_param_external_dissector(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo , int hfid _U_, h248_curr_info_t* u _U_, void* dissector_hdl) {
1940
0
    call_dissector((dissector_handle_t) dissector_hdl,tvb,pinfo,tree);
1941
0
}
1942
1943
1944
static const h248_package_t no_package = { 0xffff, &hf_h248_no_pkg, &ett_h248_no_pkg, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
1945
static const h248_pkg_sig_t no_signal = { 0, &hf_h248_no_sig, &ett_h248_no_sig, NULL, NULL };
1946
static const h248_pkg_param_t no_param = { 0, &hf_h248_param, h248_param_uint_item,  NULL };
1947
static const h248_pkg_evt_t no_event = { 0, &hf_h248_no_evt, &ett_h248_no_evt, NULL, NULL };
1948
1949
static const h248_package_t *find_package_id(uint16_t pkgid);
1950
static wmem_tree_t* packages;
1951
1952
0
extern void h248_param_PkgdName(proto_tree* tree, tvbuff_t* tvb, packet_info* pinfo , int hfid _U_, h248_curr_info_t* u1 _U_, void* u2 _U_) {
1953
0
    tvbuff_t *new_tvb = NULL;
1954
0
    proto_tree *package_tree=NULL;
1955
0
    uint16_t name_major, name_minor;
1956
0
    const h248_package_t* pkg = NULL;
1957
0
    unsigned offset = 0;
1958
0
    asn1_ctx_t asn1_ctx;
1959
0
    asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
1960
1961
0
    offset = dissect_ber_octet_string(false, &asn1_ctx, tree, tvb, offset, hfid , &new_tvb);
1962
1963
0
    if (new_tvb) {
1964
        /* this field is always 4 bytes  so just read it into two integers */
1965
0
        name_major=tvb_get_ntohs(new_tvb, 0);
1966
0
        name_minor=tvb_get_ntohs(new_tvb, 2);
1967
0
        pkg = find_package_id(name_major);
1968
        /* do the prettification */
1969
0
        proto_item_append_text(asn1_ctx.created_item, "  %s (%04x)",
1970
0
                               val_to_str_const(0, pkg->param_names, "Unknown Package"),
1971
0
                               name_major);
1972
1973
0
        if(tree){
1974
0
            proto_item* pi;
1975
0
            const char* strval;
1976
1977
0
            package_tree = proto_item_add_subtree(asn1_ctx.created_item, ett_packagename);
1978
0
            proto_tree_add_uint_format(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major,
1979
0
                "%s (0x%04x)", val_to_str_const(0, pkg->param_names, "Unknown Package"), name_major);
1980
1981
0
            pi = proto_tree_add_uint(package_tree, hf_248_pkg_param, tvb, offset-2, 2, name_minor);
1982
1983
0
            if (pkg->signal_names && ( strval = try_val_to_str(name_minor, pkg->signal_names) )) {
1984
0
                strval = wmem_strdup_printf(pinfo->pool, "%s (%d)",strval,name_minor);
1985
0
            } else {
1986
0
                strval = wmem_strdup_printf(pinfo->pool, "Unknown (%d)",name_minor);
1987
0
            }
1988
1989
0
            proto_item_set_text(pi,"Signal ID: %s", strval);
1990
0
        }
1991
1992
0
    }
1993
0
}
1994
1995
1996
0
static int dissect_h248_trx_id(bool implicit_tag, packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, uint32_t* trx_id_p) {
1997
0
    uint64_t trx_id = 0;
1998
0
    int8_t ber_class;
1999
0
    bool pc;
2000
0
    int32_t tag;
2001
0
    uint32_t len;
2002
0
    uint32_t i;
2003
2004
0
    if(!implicit_tag){
2005
0
        offset=dissect_ber_identifier(pinfo, tree, tvb, offset, &ber_class, &pc, &tag);
2006
0
        offset=dissect_ber_length(pinfo, tree, tvb, offset, &len, NULL);
2007
0
    } else {
2008
0
        len=tvb_reported_length_remaining(tvb, offset);
2009
0
    }
2010
2011
2012
0
    if (len > 8 || len < 1) {
2013
0
        THROW(BoundsError);
2014
0
    } else {
2015
0
        for(i=1;i<=len;i++){
2016
0
            trx_id=(trx_id<<8)|tvb_get_uint8(tvb, offset);
2017
0
            offset++;
2018
0
        }
2019
0
        if (trx_id > 0xffffffff) {
2020
0
            proto_item* pi = proto_tree_add_uint64(tree, hf_h248_transactionId64, tvb, offset-len, len, trx_id);
2021
0
            expert_add_info(pinfo, pi, &ei_h248_transactionId64);
2022
2023
0
            *trx_id_p = 0;
2024
2025
0
        } else {
2026
0
            proto_tree_add_uint(tree, hf_h248_transactionId, tvb, offset-len, len, (uint32_t)trx_id);
2027
0
            *trx_id_p = (uint32_t)trx_id;
2028
0
        }
2029
0
    }
2030
2031
0
    return offset;
2032
0
}
2033
2034
0
static int dissect_h248_ctx_id(bool implicit_tag, packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, uint32_t* ctx_id_p) {
2035
0
    int8_t ber_class;
2036
0
    bool pc;
2037
0
    int32_t tag;
2038
0
    uint32_t len;
2039
0
    uint64_t ctx_id = 0;
2040
0
    uint32_t i;
2041
2042
0
    if(!implicit_tag){
2043
0
        offset=dissect_ber_identifier(pinfo, tree, tvb, offset, &ber_class, &pc, &tag);
2044
0
        offset=dissect_ber_length(pinfo, tree, tvb, offset, &len, NULL);
2045
0
    } else {
2046
0
        len=tvb_reported_length_remaining(tvb, offset);
2047
0
    }
2048
2049
2050
0
    if (len > 8 || len < 1) {
2051
0
        THROW(BoundsError);
2052
0
    } else {
2053
0
        for(i=1;i<=len;i++){
2054
0
            ctx_id=(ctx_id<<8)|tvb_get_uint8(tvb, offset);
2055
0
            offset++;
2056
0
        }
2057
2058
0
        if (ctx_id > 0xffffffff) {
2059
0
            proto_item* pi = proto_tree_add_uint64(tree, hf_h248_context_id64, tvb, offset-len, len, ctx_id);
2060
0
            expert_add_info(pinfo, pi, &ei_h248_context_id64);
2061
2062
0
            *ctx_id_p = 0xfffffffd;
2063
2064
0
        } else {
2065
0
            proto_item* pi = proto_tree_add_uint(tree, hf_h248_context_id, tvb, offset-len, len, (uint32_t)ctx_id);
2066
2067
0
            if ( ctx_id ==  NULL_CONTEXT ) {
2068
0
                proto_item_set_text(pi,"contextId: Null Context(0)");
2069
0
            } else if ( ctx_id ==  CHOOSE_CONTEXT ) {
2070
0
                proto_item_set_text(pi,"contextId: $ (Choose Context = 0xfffffffe)");
2071
0
            } else if ( ctx_id ==  ALL_CONTEXTS ) {
2072
0
                proto_item_set_text(pi,"contextId: * (All Contexts = 0xffffffff)");
2073
0
            }
2074
2075
0
            *ctx_id_p = (uint32_t) ctx_id;
2076
0
        }
2077
0
    }
2078
2079
0
    return offset;
2080
0
}
2081
2082
182
static s_h248_package_t *s_find_package_id(uint16_t pkgid) {
2083
182
    s_h248_package_t *s_pkg = NULL;
2084
182
    s_pkg = (s_h248_package_t *)wmem_tree_lookup32(packages, (uint32_t)(pkgid));
2085
182
    return s_pkg;
2086
182
}
2087
2088
0
static const h248_package_t *find_package_id(uint16_t pkgid) {
2089
0
    s_h248_package_t *s_pkg = NULL;
2090
0
    s_pkg = s_find_package_id(pkgid); /*(packages, GUINT_TO_POINTER((uint32_t)(pkgid))); */
2091
0
    if (! s_pkg ) return &no_package;
2092
0
    return s_pkg->pkg;
2093
0
}
2094
2095
364
static bool is_pkg_default(uint16_t pkgid) {
2096
364
    s_h248_package_t *s_pkg = NULL;
2097
364
    s_pkg = (s_h248_package_t *)wmem_tree_lookup32(packages, (uint32_t)(pkgid));
2098
364
    if(! s_pkg ) return true;
2099
364
    return s_pkg->is_default;
2100
364
}
2101
2102
364
void h248_register_package(h248_package_t* pkg, pkg_reg_action reg_action) {
2103
364
    h248_package_t *pkg_found = NULL, *pkg_high = NULL, *pkg_low = NULL;
2104
364
    s_h248_package_t *s_pkg = NULL;
2105
364
    value_string *vst;
2106
364
    bool pkg_default = false;
2107
364
    int j = 0, idx = 0, i = 0, k = 0;
2108
364
    if (! packages) {
2109
        /* no packages are yet registered so create tree and add default packages to tree
2110
         */
2111
14
        packages = wmem_tree_new(wmem_epan_scope()); /* init tree if no entries */
2112
3.93k
        while (base_package_name_vals[i].strptr != NULL) {
2113
3.92k
            pkg_found = wmem_new0(wmem_epan_scope(), h248_package_t); /* create a h248 package structure */
2114
3.92k
            pkg_found->id = base_package_name_vals[i].value;
2115
3.92k
            vst = (value_string *)wmem_alloc0(wmem_epan_scope(), sizeof(value_string)*2);
2116
3.92k
            vst[0].strptr = base_package_name_vals[i].strptr;
2117
3.92k
            pkg_found->param_names = vst;
2118
3.92k
            pkg_found->hfid = &hf_h248_pkg_name;
2119
3.92k
            pkg_found->ett = &ett_packagename;
2120
3.92k
            try_val_to_str_idx((pkg_found->id)<<16,base_event_name_vals, &j);
2121
            /* now look for events and signals that may be defined for package.  If found, create value_strings */
2122
3.92k
            if (j != -1) {
2123
112
                j++; idx=j;
2124
518
                while((base_event_name_vals[j].strptr!=NULL) && (((base_event_name_vals[j].value)>>16) == (pkg_found->id))) {
2125
406
                    j++;
2126
406
                };
2127
112
                if (idx < j) {
2128
84
                    vst = (value_string *)wmem_alloc0(wmem_epan_scope(), sizeof(value_string)*(j-idx+1));
2129
490
                    for (k=0;idx<j;k++) {
2130
406
                        vst[k].strptr = base_event_name_vals[idx].strptr;
2131
406
                        vst[k].value = (base_event_name_vals[idx].value & 0xffff);
2132
406
                        idx++;
2133
406
                    };
2134
84
                    pkg_found->event_names = vst;
2135
84
                }
2136
112
            }
2137
            /* now look at signals */
2138
3.92k
            if (!try_val_to_str_idx((pkg_found->id)<<16, base_signal_name_vals, &j)) {
2139
3.86k
                j++; idx=j;
2140
3.86k
                while((base_signal_name_vals[j].strptr != NULL) && ((base_signal_name_vals[j].value>>16) == (pkg_found->id))) {
2141
0
                    j++;
2142
0
                };
2143
3.86k
                if (idx < j) {
2144
0
                    vst = (value_string *)wmem_alloc0(wmem_epan_scope(), sizeof(value_string)*(j-idx+1));
2145
0
                    for (k=0;idx<j;k++) {
2146
0
                        vst[k].strptr = base_signal_name_vals[idx].strptr;
2147
0
                        vst[k].value = (base_signal_name_vals[idx].value &0xffff);
2148
0
                        idx++;
2149
0
                    };
2150
0
                    pkg_found->signal_names = vst;
2151
0
                }
2152
3.86k
            };
2153
3.92k
            s_pkg = wmem_new0(wmem_epan_scope(), s_h248_package_t);
2154
3.92k
            s_pkg->is_default = true;
2155
3.92k
            s_pkg->pkg = pkg_found;
2156
3.92k
            wmem_tree_insert32(packages, pkg_found->id, s_pkg);
2157
3.92k
            i++;
2158
3.92k
        };
2159
14
        pkg_found = NULL; /* reset pointer */
2160
14
    };
2161
364
    pkg_default = is_pkg_default(pkg->id);
2162
364
    if (((reg_action==REPLACE_PKG) || (reg_action==ADD_PKG)) && pkg_default) {
2163
        /* add/replace in tree */
2164
182
        s_pkg = wmem_new0(wmem_epan_scope(), s_h248_package_t);
2165
182
        s_pkg->is_default = false;
2166
182
        s_pkg->pkg = (h248_package_t *)pkg;
2167
182
        wmem_tree_insert32(packages, pkg->id, s_pkg);
2168
182
        return;
2169
182
    };
2170
182
    if(pkg_default) reg_action = MERGE_PKG_HIGH; /* always make new package override default */
2171
182
    s_pkg = s_find_package_id(pkg->id);
2172
182
    if (s_pkg == NULL) { /* no need to merge - package not in tree */
2173
0
        s_pkg = wmem_new0(wmem_epan_scope(), s_h248_package_t);
2174
0
        s_pkg->is_default = false;
2175
0
        s_pkg->pkg = (h248_package_t *)pkg;
2176
0
        wmem_tree_insert32(packages, pkg->id, s_pkg);
2177
0
        return;
2178
0
    }
2179
182
    pkg_found = s_pkg->pkg;
2180
182
    if (reg_action==MERGE_PKG_HIGH) {
2181
182
        pkg_high = (h248_package_t *)pkg;
2182
182
        pkg_low = pkg_found;
2183
182
    };
2184
182
    if (reg_action==MERGE_PKG_LOW) {
2185
0
        pkg_high = pkg_found;
2186
0
        pkg_low = (h248_package_t *)pkg;
2187
0
    };
2188
182
    if(pkg_high) {
2189
        /* if h248_package_t High Priority value !NULL, replace it in the found tree entry else use current entry */
2190
182
        (pkg_high->hfid ? (pkg_found->hfid=pkg_high->hfid) : (pkg_found->hfid=pkg_low->hfid));
2191
182
        (pkg_high->ett ? (pkg_found->ett=pkg_high->ett ):( pkg_found->ett=pkg_low->ett));
2192
182
        (pkg_high->param_names ? (pkg_found->param_names=pkg_high->param_names ):( pkg_found->param_names=pkg_low->param_names));
2193
182
        (pkg_high->signal_names ? (pkg_found->signal_names=pkg_high->signal_names ):( pkg_found->signal_names=pkg_low->signal_names));
2194
182
        (pkg_high->event_names ? (pkg_found->event_names=pkg_high->event_names ):( pkg_found->event_names=pkg_low->event_names));
2195
182
        (pkg_high->stats_names ? (pkg_found->stats_names=pkg_high->stats_names ):( pkg_found->stats_names=pkg_low->stats_names));
2196
182
        (pkg_high->properties ? (pkg_found->properties=pkg_high->properties ):( pkg_found->properties=pkg_low->properties));
2197
182
        (pkg_high->signals ? (pkg_found->signals=pkg_high->signals ):( pkg_found->signals=pkg_low->signals));
2198
182
        (pkg_high->events ? (pkg_found->events=pkg_high->events ):( pkg_found->events=pkg_low->events));
2199
182
        (pkg_high->statistics ? (pkg_found->statistics=pkg_high->statistics ):( pkg_found->statistics=pkg_low->statistics));
2200
182
        s_pkg->pkg = pkg_found;
2201
182
        s_pkg->is_default = false;
2202
182
    }
2203
182
}
2204
2205
2206
static uint32_t packageandid;
2207
2208
0
static unsigned dissect_h248_PkgdName(bool implicit_tag, tvbuff_t *tvb, unsigned offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
2209
0
    tvbuff_t *new_tvb = NULL;
2210
0
    proto_tree *package_tree=NULL;
2211
0
    uint16_t name_major, name_minor;
2212
0
    const h248_package_t* pkg = NULL;
2213
2214
0
    offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
2215
2216
0
    if (new_tvb) {
2217
        /* this field is always 4 bytes  so just read it into two integers */
2218
0
        name_major=tvb_get_ntohs(new_tvb, 0);
2219
0
        name_minor=tvb_get_ntohs(new_tvb, 2);
2220
0
        packageandid=(name_major<<16)|name_minor;
2221
2222
0
        pkg = find_package_id(name_major);
2223
        /* do the prettification */
2224
0
        proto_item_append_text(actx->created_item, "  %s (%04x)",
2225
0
                               val_to_str_const(0, pkg->param_names, "Unknown Package"),
2226
0
                               name_major);
2227
2228
0
        if(tree){
2229
0
            package_tree = proto_item_add_subtree(actx->created_item, ett_packagename);
2230
0
            proto_tree_add_uint_format(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major,
2231
0
                "PkgName: %s (0x%04x)", val_to_str_const(0, pkg->param_names, "Unknown Package"), name_major);
2232
0
        }
2233
2234
0
        {
2235
0
            proto_item* pi = proto_tree_add_uint(package_tree, hf_248_pkg_param, tvb, offset-2, 2, name_minor);
2236
0
            const char* strval;
2237
2238
0
            if (pkg->param_names && ( strval = try_val_to_str(name_minor, pkg->param_names) )) {
2239
0
                strval = wmem_strdup_printf(actx->pinfo->pool, "%s (%d)",strval,name_minor);
2240
0
            } else {
2241
0
                strval = wmem_strdup_printf(actx->pinfo->pool, "Unknown (%d)",name_minor);
2242
0
            }
2243
2244
0
            proto_item_set_text(pi,"Parameter: %s", strval);
2245
0
        }
2246
0
    } else {
2247
0
        pkg = &no_package;
2248
0
    }
2249
2250
0
    curr_info.pkg = pkg;
2251
2252
0
    return offset;
2253
0
}
2254
2255
0
static unsigned dissect_h248_EventName(bool implicit_tag, tvbuff_t *tvb, unsigned offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
2256
0
    tvbuff_t *new_tvb;
2257
0
    proto_tree *package_tree=NULL;
2258
0
    uint16_t name_major, name_minor;
2259
0
    const h248_package_t* pkg = NULL;
2260
0
    const h248_pkg_evt_t* evt = NULL;
2261
2262
0
    offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
2263
2264
0
    if (new_tvb) {
2265
        /* this field is always 4 bytes  so just read it into two integers */
2266
0
        name_major=tvb_get_ntohs(new_tvb, 0);
2267
0
        name_minor=tvb_get_ntohs(new_tvb, 2);
2268
0
        packageandid=(name_major<<16)|name_minor;
2269
2270
0
        pkg = find_package_id(name_major);
2271
        /* do the prettification */
2272
0
        proto_item_append_text(actx->created_item, "  %s (%04x)",
2273
0
                               val_to_str_const(0, pkg->param_names, "Unknown Package"),
2274
0
                               name_major);
2275
0
        if(tree){
2276
0
            package_tree = proto_item_add_subtree(actx->created_item, ett_packagename);
2277
0
        }
2278
0
        proto_tree_add_uint_format(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major,
2279
0
            "%s (0x%04x)", val_to_str_const(0, pkg->param_names, "Unknown Package"), name_major);
2280
2281
0
        curr_info.pkg = pkg;
2282
2283
0
        if (pkg->events) {
2284
0
            for (evt = pkg->events; evt->hfid; evt++) {
2285
0
                if (name_minor == evt->id) {
2286
0
                    break;
2287
0
                }
2288
0
            }
2289
2290
0
            if (! evt->hfid) evt = &no_event;
2291
0
        } else {
2292
0
            evt = &no_event;
2293
0
        }
2294
2295
0
        curr_info.evt = evt;
2296
2297
0
        {
2298
0
            proto_item* pi = proto_tree_add_uint(package_tree, hf_h248_event_code, tvb, offset-2, 2, name_minor);
2299
0
            const char* strval;
2300
2301
0
            if (pkg->event_names && ( strval = try_val_to_str(name_minor, pkg->event_names) )) {
2302
0
                strval = wmem_strdup_printf(actx->pinfo->pool, "%s (%d)",strval,name_minor);
2303
0
            } else {
2304
0
                strval = wmem_strdup_printf(actx->pinfo->pool, "Unknown (%d)",name_minor);
2305
0
            }
2306
2307
0
            proto_item_set_text(pi,"Event ID: %s", strval);
2308
0
        }
2309
2310
0
    } else {
2311
0
        curr_info.pkg = &no_package;
2312
0
        curr_info.evt = &no_event;
2313
0
    }
2314
2315
0
    return offset;
2316
0
}
2317
2318
2319
2320
0
static unsigned dissect_h248_SignalName(bool implicit_tag , tvbuff_t *tvb, unsigned offset,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
2321
0
    tvbuff_t *new_tvb;
2322
0
    proto_tree *package_tree=NULL;
2323
0
    uint16_t name_major, name_minor;
2324
0
    const h248_package_t* pkg = NULL;
2325
0
    const h248_pkg_sig_t* sig;
2326
2327
0
    offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
2328
2329
0
    if (new_tvb) {
2330
        /* this field is always 4 bytes so just read it into two integers */
2331
0
        name_major=tvb_get_ntohs(new_tvb, 0);
2332
0
        name_minor=tvb_get_ntohs(new_tvb, 2);
2333
0
        packageandid=(name_major<<16)|name_minor;
2334
2335
0
        pkg = find_package_id(name_major);
2336
        /* do the prettification */
2337
0
        proto_item_append_text(actx->created_item, "  %s (%04x)",
2338
0
                               val_to_str_const(0, pkg->param_names, "Unknown Package"),
2339
0
                               name_major);
2340
0
        if(tree){
2341
0
            package_tree = proto_item_add_subtree(actx->created_item, ett_packagename);
2342
0
        }
2343
0
        proto_tree_add_uint_format(package_tree, hf_h248_pkg_name, tvb, offset-4, 2, name_major,
2344
0
            "%s (0x%04x)", val_to_str_const(0, pkg->param_names, "Unknown Package"), name_major);
2345
2346
0
        if (pkg->signals) {
2347
0
            for (sig = pkg->signals; sig->hfid; sig++) {
2348
0
                if (name_minor == sig->id) {
2349
0
                    break;
2350
0
                }
2351
0
            }
2352
2353
0
            if (! sig->hfid) sig = &no_signal;
2354
2355
0
            curr_info.pkg = pkg;
2356
0
            curr_info.sig = sig;
2357
0
        } else {
2358
0
            curr_info.pkg = &no_package;
2359
0
            curr_info.sig = &no_signal;
2360
0
        }
2361
2362
0
        {
2363
0
            proto_item* pi = proto_tree_add_uint(package_tree, hf_h248_signal_code, tvb, offset-2, 2, name_minor);
2364
0
            const char* strval;
2365
2366
0
            if (pkg->signal_names && ( strval = try_val_to_str(name_minor, pkg->signal_names) )) {
2367
0
                strval = wmem_strdup_printf(actx->pinfo->pool, "%s (%d)",strval,name_minor);
2368
0
            } else {
2369
0
                strval = wmem_strdup_printf(actx->pinfo->pool, "Unknown (%d)",name_minor);
2370
0
            }
2371
2372
0
            proto_item_set_text(pi,"Signal ID: %s", strval);
2373
0
        }
2374
2375
0
    } else {
2376
0
        curr_info.pkg = &no_package;
2377
0
        curr_info.sig = &no_signal;
2378
0
    }
2379
2380
0
    return offset;
2381
0
}
2382
2383
0
static unsigned dissect_h248_PropertyID(bool implicit_tag _U_, tvbuff_t *tvb, unsigned offset,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
2384
2385
0
    int8_t ber_class;
2386
0
    bool pc, ind;
2387
0
    int32_t tag;
2388
0
    uint32_t len;
2389
0
    uint16_t name_minor;
2390
0
    int end_offset;
2391
0
    const h248_package_t* pkg;
2392
0
    const h248_pkg_param_t* prop;
2393
0
    tvbuff_t *next_tvb = NULL;
2394
2395
0
    offset=dissect_ber_identifier(actx->pinfo, tree, tvb, offset, &ber_class, &pc, &tag);
2396
0
    offset=dissect_ber_length(actx->pinfo, tree, tvb, offset, &len, &ind);
2397
0
    end_offset=offset+len;
2398
2399
0
    if( (ber_class!=BER_CLASS_UNI)
2400
0
      ||(tag!=BER_UNI_TAG_OCTETSTRING) ){
2401
0
        proto_tree_add_expert_format(tree, actx->pinfo, &ei_h248_octet_string_expected, tvb, offset-2, 2,
2402
0
            "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag);
2403
0
        return end_offset;
2404
0
    }
2405
2406
0
    next_tvb = tvb_new_subset_length(tvb,offset,len);
2407
2408
0
    name_minor = packageandid & 0xffff;
2409
2410
0
    pkg = (curr_info.pkg) ? curr_info.pkg : &no_package;
2411
2412
0
    if (pkg->properties) {
2413
0
        for (prop = pkg->properties; prop && prop->hfid; prop++) {
2414
0
            if (name_minor == prop->id) {
2415
0
                break;
2416
0
            }
2417
0
        }
2418
0
    } else {
2419
0
        prop = &no_param;
2420
0
    }
2421
0
    if (prop && prop->hfid && prop->dissector) {
2422
0
       prop->dissector(tree, next_tvb, actx->pinfo, *(prop->hfid), &curr_info, prop->data);
2423
0
    }
2424
2425
0
    return end_offset;
2426
0
}
2427
2428
2429
2430
0
static unsigned dissect_h248_SigParameterName(bool implicit_tag _U_, tvbuff_t *tvb, unsigned offset,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
2431
0
    tvbuff_t *next_tvb;
2432
0
    uint32_t param_id = 0xffffffff;
2433
0
    const h248_pkg_param_t* sigpar;
2434
0
    const char* strval;
2435
0
    proto_item* pi;
2436
2437
0
    offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset,  hf_index, &next_tvb);
2438
0
    pi = actx->created_item;
2439
2440
0
    switch(tvb_reported_length(next_tvb)) {
2441
0
        case 4: param_id = tvb_get_ntohl(next_tvb,0); break;
2442
0
        case 3: param_id = tvb_get_ntoh24(next_tvb,0); break;
2443
0
        case 2: param_id = tvb_get_ntohs(next_tvb,0); break;
2444
0
        case 1: param_id = tvb_get_uint8(next_tvb,0); break;
2445
0
        default: break;
2446
0
    }
2447
2448
0
    curr_info.par = &no_param;
2449
2450
0
    if (curr_info.sig && curr_info.sig->parameters) {
2451
0
        for(sigpar = curr_info.sig->parameters; sigpar->hfid; sigpar++) {
2452
0
            if (sigpar->id == param_id) {
2453
0
                curr_info.par = sigpar;
2454
0
                break;
2455
0
            }
2456
0
        }
2457
0
    }
2458
2459
0
    if (curr_info.sig && curr_info.sig->param_names && ( strval = try_val_to_str(param_id, curr_info.sig->param_names) )) {
2460
0
        strval = wmem_strdup_printf(actx->pinfo->pool, "%s (%d)",strval,param_id);
2461
0
    } else {
2462
0
        strval = wmem_strdup_printf(actx->pinfo->pool, "Unknown (%d)",param_id);
2463
0
    }
2464
2465
0
    proto_item_set_text(pi,"Parameter: %s", strval);
2466
2467
0
    return offset;
2468
0
}
2469
2470
0
static unsigned dissect_h248_SigParamValue(bool implicit_tag _U_, tvbuff_t *tvb, unsigned offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
2471
0
    int end_offset;
2472
0
    int8_t ber_class;
2473
0
    bool pc, ind;
2474
0
    int32_t tag;
2475
0
    uint32_t len;
2476
0
    tvbuff_t *next_tvb = NULL;
2477
2478
0
    offset=dissect_ber_identifier(actx->pinfo, tree, tvb, offset, &ber_class, &pc, &tag);
2479
0
    offset=dissect_ber_length(actx->pinfo, tree, tvb, offset, &len, &ind);
2480
0
    end_offset=offset+len;
2481
2482
0
    if( (ber_class!=BER_CLASS_UNI)
2483
0
        ||(tag!=BER_UNI_TAG_OCTETSTRING) ){
2484
0
        proto_tree_add_expert_format(tree, actx->pinfo, &ei_h248_octet_string_expected, tvb, offset-2, 2,
2485
0
            "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag);
2486
0
        return end_offset;
2487
0
    }
2488
2489
0
    next_tvb = tvb_new_subset_length(tvb,offset,len);
2490
2491
0
    if ( curr_info.par && curr_info.par->dissector) {
2492
0
        curr_info.par->dissector(tree, next_tvb, actx->pinfo, *(curr_info.par->hfid), &curr_info, curr_info.par->data);
2493
0
    }
2494
2495
0
    return end_offset;
2496
0
}
2497
2498
0
static unsigned dissect_h248_SigParamValueV1(bool implicit_tag _U_, tvbuff_t *tvb, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
2499
0
    return dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
2500
0
}
2501
2502
2503
0
static unsigned dissect_h248_EventParameterName(bool implicit_tag _U_, tvbuff_t *tvb, unsigned offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
2504
0
    tvbuff_t *next_tvb;
2505
0
    uint32_t param_id = 0xffffffff;
2506
0
    const h248_pkg_param_t* evtpar;
2507
0
    const char* strval;
2508
0
    proto_item* pi;
2509
2510
0
    offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &next_tvb);
2511
0
    pi = actx->created_item;
2512
2513
0
    if (next_tvb) {
2514
0
        switch(tvb_reported_length(next_tvb)) {
2515
0
            case 4: param_id = tvb_get_ntohl(next_tvb,0); break;
2516
0
            case 3: param_id = tvb_get_ntoh24(next_tvb,0); break;
2517
0
            case 2: param_id = tvb_get_ntohs(next_tvb,0); break;
2518
0
            case 1: param_id = tvb_get_uint8(next_tvb,0); break;
2519
0
            default: break;
2520
0
        }
2521
0
    }
2522
2523
2524
0
    curr_info.par = &no_param;
2525
2526
0
    if (curr_info.evt && curr_info.evt->parameters) {
2527
0
        for(evtpar = curr_info.evt->parameters; evtpar->hfid; evtpar++) {
2528
0
            if (evtpar->id == param_id) {
2529
0
                curr_info.par = evtpar;
2530
0
                break;
2531
0
            }
2532
0
        }
2533
0
    } else {
2534
0
        curr_info.par = &no_param;
2535
0
    }
2536
2537
0
    if (curr_info.evt && curr_info.evt->param_names && ( strval = try_val_to_str(param_id, curr_info.evt->param_names) )) {
2538
0
        strval = wmem_strdup_printf(actx->pinfo->pool, "%s (%d)",strval,param_id);
2539
0
    } else {
2540
0
        strval = wmem_strdup_printf(actx->pinfo->pool, "Unknown (%d)",param_id);
2541
0
    }
2542
2543
0
    proto_item_set_text(pi,"Parameter: %s", strval);
2544
2545
2546
0
    return offset;
2547
0
}
2548
2549
0
static unsigned dissect_h248_EventParamValue(bool implicit_tag _U_, tvbuff_t *tvb, unsigned offset,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
2550
0
    tvbuff_t *next_tvb;
2551
0
    unsigned end_offset;
2552
0
    int8_t ber_class;
2553
0
    bool pc, ind;
2554
0
    int32_t tag;
2555
0
    uint32_t len;
2556
2557
0
    offset=dissect_ber_identifier(actx->pinfo, tree, tvb, offset, &ber_class, &pc, &tag);
2558
0
    offset=dissect_ber_length(actx->pinfo, tree, tvb, offset, &len, &ind);
2559
0
    end_offset=offset+len;
2560
2561
0
    if( (ber_class!=BER_CLASS_UNI)
2562
0
        ||(tag!=BER_UNI_TAG_OCTETSTRING) ){
2563
0
        proto_tree_add_expert_format(tree, actx->pinfo, &ei_h248_octet_string_expected, tvb, offset-2, 2,
2564
0
            "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", ber_class, pc, tag);
2565
0
        return end_offset;
2566
0
    }
2567
2568
0
    next_tvb = tvb_new_subset_length(tvb,offset,len);
2569
2570
0
    if ( curr_info.par && curr_info.par->dissector) {
2571
0
        curr_info.par->dissector(tree, next_tvb, actx->pinfo, *(curr_info.par->hfid), &curr_info, curr_info.par->data);
2572
0
    }
2573
2574
0
    return end_offset;
2575
0
}
2576
2577
0
static unsigned dissect_h248_EventParamValueV1(bool implicit_tag _U_, tvbuff_t *tvb, unsigned offset _U_,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) {
2578
0
    return dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &tvb);
2579
0
}
2580
2581
2582
0
static unsigned dissect_h248_MtpAddress(bool implicit_tag, tvbuff_t *tvb, unsigned offset,  asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index) {
2583
0
    tvbuff_t *new_tvb;
2584
0
    proto_tree *mtp_tree=NULL;
2585
0
    uint32_t val;
2586
0
    unsigned i, len, old_offset;
2587
2588
0
    old_offset=offset;
2589
0
    offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
2590
2591
0
    if (new_tvb) {
2592
        /* this field is either 2 or 4 bytes  so just read it into an integer */
2593
0
        val=0;
2594
0
        len=tvb_reported_length(new_tvb);
2595
0
        for(i=0;i<len;i++){
2596
0
            val= (val<<8)|tvb_get_uint8(new_tvb, i);
2597
0
        }
2598
2599
        /* do the prettification */
2600
0
        proto_item_append_text(actx->created_item, "  NI = %d, PC = %d ( %d-%d )", val&0x03,val>>2,val&0x03,val>>2);
2601
0
        if(tree){
2602
0
            mtp_tree = proto_item_add_subtree(actx->created_item, ett_mtpaddress);
2603
0
        }
2604
0
        proto_tree_add_uint(mtp_tree, hf_h248_mtpaddress_ni, tvb, old_offset, offset-old_offset, val&0x03);
2605
0
        proto_tree_add_uint(mtp_tree, hf_h248_mtpaddress_pc, tvb, old_offset, offset-old_offset, val>>2);
2606
0
    }
2607
2608
0
    return offset;
2609
0
}
2610
2611
0
#define H248_TAP() do { if (keep_persistent_data && curr_info.cmd) tap_queue_packet(h248_tap, actx->pinfo, curr_info.cmd); } while(0)
2612
2613
/*--- Cyclic dependencies ---*/
2614
2615
/* SecondEventsDescriptor -> SecondEventsDescriptor/eventList -> SecondRequestedEvent -> SecondRequestedActions -> NotifyBehaviour -> RegulatedEmbeddedDescriptor -> SecondEventsDescriptor */
2616
static unsigned dissect_h248_SecondEventsDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
2617
2618
2619
2620
2621
static unsigned
2622
0
dissect_h248_SecurityParmIndex(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2623
0
  offset = dissect_ber_constrained_octet_string(implicit_tag, actx, tree, tvb, offset,
2624
0
                                                   4, 4, hf_index, NULL);
2625
2626
0
  return offset;
2627
0
}
2628
2629
2630
2631
static unsigned
2632
0
dissect_h248_SequenceNum(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2633
0
  offset = dissect_ber_constrained_octet_string(implicit_tag, actx, tree, tvb, offset,
2634
0
                                                   4, 4, hf_index, NULL);
2635
2636
0
  return offset;
2637
0
}
2638
2639
2640
2641
static unsigned
2642
0
dissect_h248_AuthData(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2643
0
  offset = dissect_ber_constrained_octet_string(implicit_tag, actx, tree, tvb, offset,
2644
0
                                                   12, 32, hf_index, NULL);
2645
2646
0
  return offset;
2647
0
}
2648
2649
2650
static const ber_sequence_t AuthenticationHeader_sequence[] = {
2651
  { &hf_h248_secParmIndex   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SecurityParmIndex },
2652
  { &hf_h248_seqNum         , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SequenceNum },
2653
  { &hf_h248_ad             , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_AuthData },
2654
  { NULL, 0, 0, 0, NULL }
2655
};
2656
2657
static unsigned
2658
1
dissect_h248_AuthenticationHeader(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2659
1
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2660
1
                                   AuthenticationHeader_sequence, hf_index, ett_h248_AuthenticationHeader);
2661
2662
1
  return offset;
2663
1
}
2664
2665
2666
2667
static unsigned
2668
0
dissect_h248_T_version(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2669
0
    offset = dissect_ber_constrained_integer(implicit_tag, actx, tree, tvb, offset,
2670
0
                                                            0U, 99U, hf_index, &h248_version);
2671
2672
2673
0
  return offset;
2674
0
}
2675
2676
2677
2678
static unsigned
2679
0
dissect_h248_OCTET_STRING_SIZE_4(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2680
0
  offset = dissect_ber_constrained_octet_string(implicit_tag, actx, tree, tvb, offset,
2681
0
                                                   4, 4, hf_index, NULL);
2682
2683
0
  return offset;
2684
0
}
2685
2686
2687
2688
static unsigned
2689
0
dissect_h248_INTEGER_0_65535(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2690
0
  offset = dissect_ber_constrained_integer(implicit_tag, actx, tree, tvb, offset,
2691
0
                                                            0U, 65535U, hf_index, NULL);
2692
2693
0
  return offset;
2694
0
}
2695
2696
2697
static const ber_sequence_t IP4Address_sequence[] = {
2698
  { &hf_h248_iP4Address     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_OCTET_STRING_SIZE_4 },
2699
  { &hf_h248_portNumber     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
2700
  { NULL, 0, 0, 0, NULL }
2701
};
2702
2703
static unsigned
2704
0
dissect_h248_IP4Address(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2705
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2706
0
                                   IP4Address_sequence, hf_index, ett_h248_IP4Address);
2707
2708
0
  return offset;
2709
0
}
2710
2711
2712
2713
static unsigned
2714
0
dissect_h248_OCTET_STRING_SIZE_16(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2715
0
  offset = dissect_ber_constrained_octet_string(implicit_tag, actx, tree, tvb, offset,
2716
0
                                                   16, 16, hf_index, NULL);
2717
2718
0
  return offset;
2719
0
}
2720
2721
2722
static const ber_sequence_t IP6Address_sequence[] = {
2723
  { &hf_h248_iP6Address     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_OCTET_STRING_SIZE_16 },
2724
  { &hf_h248_portNumber     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
2725
  { NULL, 0, 0, 0, NULL }
2726
};
2727
2728
static unsigned
2729
0
dissect_h248_IP6Address(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2730
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2731
0
                                   IP6Address_sequence, hf_index, ett_h248_IP6Address);
2732
2733
0
  return offset;
2734
0
}
2735
2736
2737
2738
static unsigned
2739
0
dissect_h248_IA5String(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2740
0
  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
2741
0
                                            actx, tree, tvb, offset, hf_index,
2742
0
                                            NULL);
2743
2744
0
  return offset;
2745
0
}
2746
2747
2748
static const ber_sequence_t DomainName_sequence[] = {
2749
  { &hf_h248_domName        , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IA5String },
2750
  { &hf_h248_portNumber     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
2751
  { NULL, 0, 0, 0, NULL }
2752
};
2753
2754
static unsigned
2755
0
dissect_h248_DomainName(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2756
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2757
0
                                   DomainName_sequence, hf_index, ett_h248_DomainName);
2758
2759
0
  return offset;
2760
0
}
2761
2762
2763
2764
static unsigned
2765
0
dissect_h248_PathName(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2766
0
  offset = dissect_ber_constrained_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
2767
0
                                                        actx, tree, tvb, offset,
2768
0
                                                        1, 64, hf_index, NULL);
2769
2770
0
  return offset;
2771
0
}
2772
2773
2774
2775
static const value_string h248_MId_vals[] = {
2776
  {   0, "ip4Address" },
2777
  {   1, "ip6Address" },
2778
  {   2, "domainName" },
2779
  {   3, "deviceName" },
2780
  {   4, "mtpAddress" },
2781
  { 0, NULL }
2782
};
2783
2784
static const ber_choice_t MId_choice[] = {
2785
  {   0, &hf_h248_ip4Address     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IP4Address },
2786
  {   1, &hf_h248_ip6Address     , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IP6Address },
2787
  {   2, &hf_h248_domainName     , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_DomainName },
2788
  {   3, &hf_h248_deviceName     , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_PathName },
2789
  {   4, &hf_h248_mtpAddress     , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_MtpAddress },
2790
  { 0, NULL, 0, 0, 0, NULL }
2791
};
2792
2793
static unsigned
2794
0
dissect_h248_MId(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2795
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
2796
0
                                 MId_choice, hf_index, ett_h248_MId,
2797
0
                                 NULL);
2798
2799
0
  return offset;
2800
0
}
2801
2802
2803
2804
2805
static unsigned
2806
0
dissect_h248_T_errorCode(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2807
0
    offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index, &error_code);
2808
0
    expert_add_info(actx->pinfo, actx->created_item, &ei_h248_errored_command);
2809
2810
0
    if (curr_info.cmd) {
2811
0
        gcp_cmd_set_error(curr_info.cmd,error_code);
2812
0
    } else if (curr_info.trx) {
2813
0
        gcp_trx_set_error(curr_info.trx,error_code);
2814
0
    }
2815
2816
0
  return offset;
2817
0
}
2818
2819
2820
2821
static unsigned
2822
0
dissect_h248_ErrorText(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2823
0
  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
2824
0
                                            actx, tree, tvb, offset, hf_index,
2825
0
                                            NULL);
2826
2827
0
  return offset;
2828
0
}
2829
2830
2831
static const ber_sequence_t ErrorDescriptor_sequence[] = {
2832
  { &hf_h248_errorCode      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_errorCode },
2833
  { &hf_h248_errorText      , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ErrorText },
2834
  { NULL, 0, 0, 0, NULL }
2835
};
2836
2837
static unsigned
2838
0
dissect_h248_ErrorDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2839
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2840
0
                                   ErrorDescriptor_sequence, hf_index, ett_h248_ErrorDescriptor);
2841
2842
0
  return offset;
2843
0
}
2844
2845
2846
2847
static unsigned
2848
0
dissect_h248_TransactionId(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2849
0
  offset = dissect_ber_constrained_integer(implicit_tag, actx, tree, tvb, offset,
2850
0
                                                            0U, 4294967295U, hf_index, NULL);
2851
2852
0
  return offset;
2853
0
}
2854
2855
2856
2857
static unsigned
2858
0
dissect_h248_T_transactionId(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2859
0
    uint32_t trx_id = 0;
2860
0
  offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id);
2861
0
    curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_REQUEST, actx->pinfo, keep_persistent_data);
2862
0
    error_code = 0;
2863
2864
0
  return offset;
2865
0
}
2866
2867
2868
2869
2870
static unsigned
2871
0
dissect_h248_ContextId(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2872
0
    uint32_t ctx_id = 0;
2873
0
  offset = dissect_h248_ctx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &ctx_id);
2874
0
    curr_info.ctx = gcp_ctx(curr_info.msg,curr_info.trx,ctx_id,actx->pinfo,keep_persistent_data);
2875
0
    curr_info.cmd = NULL;
2876
0
    curr_info.term = NULL;
2877
2878
0
  return offset;
2879
0
}
2880
2881
2882
2883
static unsigned
2884
0
dissect_h248_INTEGER_0_15(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2885
0
  offset = dissect_ber_constrained_integer(implicit_tag, actx, tree, tvb, offset,
2886
0
                                                            0U, 15U, hf_index, NULL);
2887
2888
0
  return offset;
2889
0
}
2890
2891
2892
2893
static unsigned
2894
0
dissect_h248_BOOLEAN(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2895
0
  offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
2896
2897
0
  return offset;
2898
0
}
2899
2900
2901
2902
static unsigned
2903
0
dissect_h248_WildcardField(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2904
0
    tvbuff_t* new_tvb;
2905
0
    offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
2906
0
    tree = proto_item_add_subtree(actx->created_item,ett_wildcard);
2907
0
    proto_tree_add_item(tree,hf_h248_term_wild_type,new_tvb,0,1,ENC_BIG_ENDIAN);
2908
0
    proto_tree_add_item(tree,hf_h248_term_wild_level,new_tvb,0,1,ENC_BIG_ENDIAN);
2909
0
    proto_tree_add_item(tree,hf_h248_term_wild_position,new_tvb,0,1,ENC_BIG_ENDIAN);
2910
2911
0
    wild_term = tvb_get_uint8(new_tvb,0) & 0x80 ? GCP_WILDCARD_CHOOSE : GCP_WILDCARD_ALL;
2912
    /* limitation: assume only one wildcard is used */
2913
0
    wild_card = tvb_get_uint8(new_tvb,0);
2914
2915
2916
0
  return offset;
2917
0
}
2918
2919
2920
static const ber_sequence_t SEQUENCE_OF_WildcardField_sequence_of[1] = {
2921
  { &hf_h248_wildcard_item  , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_WildcardField },
2922
};
2923
2924
static unsigned
2925
0
dissect_h248_SEQUENCE_OF_WildcardField(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2926
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
2927
0
                                      SEQUENCE_OF_WildcardField_sequence_of, hf_index, ett_h248_SEQUENCE_OF_WildcardField);
2928
2929
0
  return offset;
2930
0
}
2931
2932
2933
2934
static unsigned
2935
0
dissect_h248_T_terminationId(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2936
0
  tvbuff_t* new_tvb;
2937
0
  h248_term_info_t term_info;
2938
2939
0
  term_info.wild_card = wild_card;
2940
0
  term_info.str = NULL;
2941
2942
0
  offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index, &new_tvb);
2943
2944
0
  if (new_tvb) {
2945
0
    curr_info.term->len = tvb_reported_length(new_tvb);
2946
0
    curr_info.term->type = 0; /* unknown */
2947
2948
0
    if (h248_term_handle) {
2949
0
      call_dissector_with_data(h248_term_handle, new_tvb, actx->pinfo, tree, &term_info);
2950
0
      wild_card = 0xFF;
2951
0
    }
2952
2953
0
    if (curr_info.term->len) {
2954
0
      curr_info.term->buffer = (uint8_t *)tvb_memdup(actx->pinfo->pool,new_tvb,0,curr_info.term->len);
2955
0
      if(term_info.str){
2956
0
        curr_info.term->str = wmem_strdup_printf(actx->pinfo->pool, "%s %s",
2957
0
                      bytes_to_str_punct(actx->pinfo->pool,curr_info.term->buffer,curr_info.term->len, 0),
2958
0
                      term_info.str);
2959
0
      }else{
2960
0
        curr_info.term->str = bytes_to_str_punct(actx->pinfo->pool,curr_info.term->buffer,curr_info.term->len, 0);
2961
0
      }
2962
0
    } else {
2963
0
      curr_info.term->buffer = (uint8_t*)wmem_strdup(actx->pinfo->pool, "");
2964
0
      curr_info.term->str = wmem_strdup(actx->pinfo->pool, "?");
2965
0
    }
2966
2967
2968
0
    curr_info.term = gcp_cmd_add_term(curr_info.msg, curr_info.trx, curr_info.cmd, curr_info.term, wild_term, actx->pinfo, keep_persistent_data);
2969
2970
0
  } else {
2971
0
    curr_info.term->len = 0;
2972
0
    curr_info.term->buffer = (uint8_t*)wmem_strdup(actx->pinfo->pool, "");
2973
0
    curr_info.term->str = wmem_strdup(actx->pinfo->pool, "?");
2974
0
  }
2975
2976
0
  return offset;
2977
0
}
2978
2979
2980
static const ber_sequence_t TerminationID_sequence[] = {
2981
  { &hf_h248_wildcard       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_WildcardField },
2982
  { &hf_h248_terminationId  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_T_terminationId },
2983
  { NULL, 0, 0, 0, NULL }
2984
};
2985
2986
static unsigned
2987
0
dissect_h248_TerminationID(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2988
0
    curr_info.term = wmem_new0(actx->pinfo->pool, gcp_term_t);
2989
0
    wild_term = GCP_WILDCARD_NONE;
2990
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2991
0
                                   TerminationID_sequence, hf_index, ett_h248_TerminationID);
2992
2993
0
  return offset;
2994
0
}
2995
2996
2997
static const value_string h248_T_topologyDirection_vals[] = {
2998
  {   0, "bothway" },
2999
  {   1, "isolate" },
3000
  {   2, "oneway" },
3001
  { 0, NULL }
3002
};
3003
3004
3005
static unsigned
3006
0
dissect_h248_T_topologyDirection(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3007
0
  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3008
0
                                  NULL);
3009
3010
0
  return offset;
3011
0
}
3012
3013
3014
3015
static unsigned
3016
0
dissect_h248_StreamID(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3017
0
  offset = dissect_ber_constrained_integer(implicit_tag, actx, tree, tvb, offset,
3018
0
                                                            0U, 65535U, hf_index, NULL);
3019
3020
0
  return offset;
3021
0
}
3022
3023
3024
static const value_string h248_T_topologyDirectionExtension_vals[] = {
3025
  {   0, "onewayexternal" },
3026
  {   1, "onewayboth" },
3027
  { 0, NULL }
3028
};
3029
3030
3031
static unsigned
3032
0
dissect_h248_T_topologyDirectionExtension(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3033
0
  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3034
0
                                  NULL);
3035
3036
0
  return offset;
3037
0
}
3038
3039
3040
static const ber_sequence_t TopologyRequest_sequence[] = {
3041
  { &hf_h248_terminationFrom, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
3042
  { &hf_h248_terminationTo  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
3043
  { &hf_h248_topologyDirection, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_T_topologyDirection },
3044
  { &hf_h248_streamID       , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
3045
  { &hf_h248_topologyDirectionExtension, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_topologyDirectionExtension },
3046
  { NULL, 0, 0, 0, NULL }
3047
};
3048
3049
static unsigned
3050
0
dissect_h248_TopologyRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3051
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3052
0
                                   TopologyRequest_sequence, hf_index, ett_h248_TopologyRequest);
3053
3054
0
  return offset;
3055
0
}
3056
3057
3058
static const ber_sequence_t T_topologyReq_sequence_of[1] = {
3059
  { &hf_h248_topologyReq_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_TopologyRequest },
3060
};
3061
3062
static unsigned
3063
0
dissect_h248_T_topologyReq(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3064
0
      curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_TOPOLOGY_REQ,offset,actx->pinfo,keep_persistent_data);
3065
0
      H248_TAP();
3066
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3067
0
                                      T_topologyReq_sequence_of, hf_index, ett_h248_T_topologyReq);
3068
3069
0
      curr_info.cmd = NULL;
3070
0
  return offset;
3071
0
}
3072
3073
3074
3075
static unsigned
3076
0
dissect_h248_Iepscallind_BOOL(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3077
0
  offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
3078
3079
0
  return offset;
3080
0
}
3081
3082
3083
3084
3085
static unsigned
3086
0
dissect_h248_PropertyName(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3087
0
  offset = dissect_h248_PkgdName(implicit_tag, tvb, offset, actx, tree, hf_index);
3088
3089
0
  return offset;
3090
0
}
3091
3092
3093
3094
static const ber_sequence_t SEQUENCE_OF_PropertyID_sequence_of[1] = {
3095
  { &hf_h248_propertyParamValue_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_PropertyID },
3096
};
3097
3098
static unsigned
3099
0
dissect_h248_SEQUENCE_OF_PropertyID(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3100
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3101
0
                                      SEQUENCE_OF_PropertyID_sequence_of, hf_index, ett_h248_SEQUENCE_OF_PropertyID);
3102
3103
0
  return offset;
3104
0
}
3105
3106
3107
static const value_string h248_Relation_vals[] = {
3108
  {   0, "greaterThan" },
3109
  {   1, "smallerThan" },
3110
  {   2, "unequalTo" },
3111
  { 0, NULL }
3112
};
3113
3114
3115
static unsigned
3116
0
dissect_h248_Relation(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3117
0
  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3118
0
                                  NULL);
3119
3120
0
  return offset;
3121
0
}
3122
3123
3124
static const value_string h248_PropParm_extraInfo_vals[] = {
3125
  {   0, "relation" },
3126
  {   1, "range" },
3127
  {   2, "sublist" },
3128
  { 0, NULL }
3129
};
3130
3131
static const ber_choice_t PropParm_extraInfo_choice[] = {
3132
  {   0, &hf_h248_relation       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Relation },
3133
  {   1, &hf_h248_range          , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3134
  {   2, &hf_h248_sublist        , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3135
  { 0, NULL, 0, 0, 0, NULL }
3136
};
3137
3138
static unsigned
3139
0
dissect_h248_PropParm_extraInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3140
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
3141
0
                                 PropParm_extraInfo_choice, hf_index, ett_h248_PropParm_extraInfo,
3142
0
                                 NULL);
3143
3144
0
  return offset;
3145
0
}
3146
3147
3148
static const ber_sequence_t PropertyParm_sequence[] = {
3149
  { &hf_h248_propertyName   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PropertyName },
3150
  { &hf_h248_propertyParamValue, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyID },
3151
  { &hf_h248_propParm_extraInfo, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_PropParm_extraInfo },
3152
  { NULL, 0, 0, 0, NULL }
3153
};
3154
3155
static unsigned
3156
0
dissect_h248_PropertyParm(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3157
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3158
0
                                   PropertyParm_sequence, hf_index, ett_h248_PropertyParm);
3159
3160
0
  return offset;
3161
0
}
3162
3163
3164
static const ber_sequence_t SEQUENCE_OF_PropertyParm_sequence_of[1] = {
3165
  { &hf_h248_contextProp_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_PropertyParm },
3166
};
3167
3168
static unsigned
3169
0
dissect_h248_SEQUENCE_OF_PropertyParm(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3170
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3171
0
                                      SEQUENCE_OF_PropertyParm_sequence_of, hf_index, ett_h248_SEQUENCE_OF_PropertyParm);
3172
3173
0
  return offset;
3174
0
}
3175
3176
3177
3178
static unsigned
3179
0
dissect_h248_ContextIDinList(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3180
0
  offset = dissect_ber_constrained_integer(implicit_tag, actx, tree, tvb, offset,
3181
0
                                                            0U, 4294967295U, hf_index, NULL);
3182
3183
0
  return offset;
3184
0
}
3185
3186
3187
static const ber_sequence_t SEQUENCE_OF_ContextIDinList_sequence_of[1] = {
3188
  { &hf_h248_contextList_item, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_h248_ContextIDinList },
3189
};
3190
3191
static unsigned
3192
0
dissect_h248_SEQUENCE_OF_ContextIDinList(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3193
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3194
0
                                      SEQUENCE_OF_ContextIDinList_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ContextIDinList);
3195
3196
0
  return offset;
3197
0
}
3198
3199
3200
static const ber_sequence_t ContextRequest_sequence[] = {
3201
  { &hf_h248_priority       , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_15 },
3202
  { &hf_h248_emergency      , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3203
  { &hf_h248_topologyReq    , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_topologyReq },
3204
  { &hf_h248_iepscallind_BOOL, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_Iepscallind_BOOL },
3205
  { &hf_h248_contextProp    , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyParm },
3206
  { &hf_h248_contextList    , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ContextIDinList },
3207
  { NULL, 0, 0, 0, NULL }
3208
};
3209
3210
static unsigned
3211
0
dissect_h248_ContextRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3212
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3213
0
                                   ContextRequest_sequence, hf_index, ett_h248_ContextRequest);
3214
3215
0
  return offset;
3216
0
}
3217
3218
3219
3220
static unsigned
3221
0
dissect_h248_NULL(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3222
0
  offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index);
3223
3224
0
  return offset;
3225
0
}
3226
3227
3228
static const ber_sequence_t IndAudPropertyParm_sequence[] = {
3229
  { &hf_h248_name           , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
3230
  { &hf_h248_propertyParms  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_PropertyParm },
3231
  { NULL, 0, 0, 0, NULL }
3232
};
3233
3234
static unsigned
3235
0
dissect_h248_IndAudPropertyParm(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3236
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3237
0
                                   IndAudPropertyParm_sequence, hf_index, ett_h248_IndAudPropertyParm);
3238
3239
0
  return offset;
3240
0
}
3241
3242
3243
static const ber_sequence_t SEQUENCE_OF_IndAudPropertyParm_sequence_of[1] = {
3244
  { &hf_h248_contextPropAud_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_IndAudPropertyParm },
3245
};
3246
3247
static unsigned
3248
0
dissect_h248_SEQUENCE_OF_IndAudPropertyParm(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3249
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3250
0
                                      SEQUENCE_OF_IndAudPropertyParm_sequence_of, hf_index, ett_h248_SEQUENCE_OF_IndAudPropertyParm);
3251
3252
0
  return offset;
3253
0
}
3254
3255
3256
static const value_string h248_SelectLogic_vals[] = {
3257
  {   0, "andAUDITSelect" },
3258
  {   1, "orAUDITSelect" },
3259
  { 0, NULL }
3260
};
3261
3262
static const ber_choice_t SelectLogic_choice[] = {
3263
  {   0, &hf_h248_andAUDITSelect , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3264
  {   1, &hf_h248_orAUDITSelect  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3265
  { 0, NULL, 0, 0, 0, NULL }
3266
};
3267
3268
static unsigned
3269
0
dissect_h248_SelectLogic(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3270
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
3271
0
                                 SelectLogic_choice, hf_index, ett_h248_SelectLogic,
3272
0
                                 NULL);
3273
3274
0
  return offset;
3275
0
}
3276
3277
3278
static const ber_sequence_t ContextAttrAuditRequest_sequence[] = {
3279
  { &hf_h248_topology       , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3280
  { &hf_h248_cAAREmergency  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3281
  { &hf_h248_cAARPriority   , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3282
  { &hf_h248_iepscallind    , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
3283
  { &hf_h248_contextPropAud , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_IndAudPropertyParm },
3284
  { &hf_h248_selectpriority , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_15 },
3285
  { &hf_h248_selectemergency, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3286
  { &hf_h248_selectiepscallind, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3287
  { &hf_h248_selectLogic    , BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_SelectLogic },
3288
  { NULL, 0, 0, 0, NULL }
3289
};
3290
3291
static unsigned
3292
0
dissect_h248_ContextAttrAuditRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3293
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3294
0
                                   ContextAttrAuditRequest_sequence, hf_index, ett_h248_ContextAttrAuditRequest);
3295
3296
0
  return offset;
3297
0
}
3298
3299
3300
3301
static unsigned
3302
0
dissect_h248_T_contextAttrAuditReq(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3303
0
      curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_CTX_ATTR_AUDIT_REQ,offset,actx->pinfo,keep_persistent_data);
3304
0
      H248_TAP();
3305
0
  offset = dissect_h248_ContextAttrAuditRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
3306
3307
0
      curr_info.cmd = NULL;
3308
0
  return offset;
3309
0
}
3310
3311
3312
static const ber_sequence_t TerminationIDList_sequence_of[1] = {
3313
  { &hf_h248_TerminationIDList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_TerminationID },
3314
};
3315
3316
static unsigned
3317
0
dissect_h248_TerminationIDList(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3318
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3319
0
                                      TerminationIDList_sequence_of, hf_index, ett_h248_TerminationIDList);
3320
3321
0
  return offset;
3322
0
}
3323
3324
3325
static const value_string h248_EventBufferControl_vals[] = {
3326
  {   0, "off" },
3327
  {   1, "lockStep" },
3328
  { 0, NULL }
3329
};
3330
3331
3332
static unsigned
3333
0
dissect_h248_EventBufferControl(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3334
0
  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3335
0
                                  NULL);
3336
3337
0
  return offset;
3338
0
}
3339
3340
3341
static const value_string h248_ServiceState_vals[] = {
3342
  {   0, "test" },
3343
  {   1, "outOfSvc" },
3344
  {   2, "inSvc" },
3345
  { 0, NULL }
3346
};
3347
3348
3349
static unsigned
3350
0
dissect_h248_ServiceState(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3351
0
  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3352
0
                                  NULL);
3353
3354
0
  return offset;
3355
0
}
3356
3357
3358
static const ber_sequence_t TerminationStateDescriptor_sequence[] = {
3359
  { &hf_h248_tSDpropertyParms, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyParm },
3360
  { &hf_h248_tSEventBufferControl, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_EventBufferControl },
3361
  { &hf_h248_serviceState   , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ServiceState },
3362
  { NULL, 0, 0, 0, NULL }
3363
};
3364
3365
static unsigned
3366
0
dissect_h248_TerminationStateDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3367
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3368
0
                                   TerminationStateDescriptor_sequence, hf_index, ett_h248_TerminationStateDescriptor);
3369
3370
0
  return offset;
3371
0
}
3372
3373
3374
static const value_string h248_StreamMode_vals[] = {
3375
  {   0, "sendOnly" },
3376
  {   1, "recvOnly" },
3377
  {   2, "sendRecv" },
3378
  {   3, "inactive" },
3379
  {   4, "loopBack" },
3380
  { 0, NULL }
3381
};
3382
3383
3384
static unsigned
3385
0
dissect_h248_StreamMode(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3386
0
  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3387
0
                                  NULL);
3388
3389
0
  return offset;
3390
0
}
3391
3392
3393
static const ber_sequence_t LocalControlDescriptor_sequence[] = {
3394
  { &hf_h248_streamMode     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamMode },
3395
  { &hf_h248_reserveValue   , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3396
  { &hf_h248_reserveGroup   , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3397
  { &hf_h248_lCDpropertyParms, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyParm },
3398
  { NULL, 0, 0, 0, NULL }
3399
};
3400
3401
static unsigned
3402
0
dissect_h248_LocalControlDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3403
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3404
0
                                   LocalControlDescriptor_sequence, hf_index, ett_h248_LocalControlDescriptor);
3405
3406
0
  return offset;
3407
0
}
3408
3409
3410
static const ber_sequence_t PropertyGroup_sequence_of[1] = {
3411
  { &hf_h248_PropertyGroup_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_PropertyParm },
3412
};
3413
3414
static unsigned
3415
0
dissect_h248_PropertyGroup(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3416
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3417
0
                                      PropertyGroup_sequence_of, hf_index, ett_h248_PropertyGroup);
3418
3419
0
  return offset;
3420
0
}
3421
3422
3423
static const ber_sequence_t SEQUENCE_OF_PropertyGroup_sequence_of[1] = {
3424
  { &hf_h248_propGrps_item  , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_PropertyGroup },
3425
};
3426
3427
static unsigned
3428
0
dissect_h248_SEQUENCE_OF_PropertyGroup(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3429
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3430
0
                                      SEQUENCE_OF_PropertyGroup_sequence_of, hf_index, ett_h248_SEQUENCE_OF_PropertyGroup);
3431
3432
0
  return offset;
3433
0
}
3434
3435
3436
static const ber_sequence_t LocalRemoteDescriptor_sequence[] = {
3437
  { &hf_h248_propGrps       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyGroup },
3438
  { NULL, 0, 0, 0, NULL }
3439
};
3440
3441
static unsigned
3442
0
dissect_h248_LocalRemoteDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3443
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3444
0
                                   LocalRemoteDescriptor_sequence, hf_index, ett_h248_LocalRemoteDescriptor);
3445
3446
0
  return offset;
3447
0
}
3448
3449
3450
3451
static unsigned
3452
0
dissect_h248_StatName(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3453
0
  offset = dissect_h248_PkgdName(implicit_tag, tvb, offset, actx, tree, hf_index);
3454
3455
0
  return offset;
3456
0
}
3457
3458
3459
3460
static unsigned
3461
0
dissect_h248_OCTET_STRING(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3462
0
  offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
3463
0
                                       NULL);
3464
3465
0
  return offset;
3466
0
}
3467
3468
3469
static const ber_sequence_t Value_sequence_of[1] = {
3470
  { &hf_h248_Value_item     , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_OCTET_STRING },
3471
};
3472
3473
static unsigned
3474
0
dissect_h248_Value(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3475
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3476
0
                                      Value_sequence_of, hf_index, ett_h248_Value);
3477
3478
0
  return offset;
3479
0
}
3480
3481
3482
3483
static unsigned
3484
0
dissect_h248_StatValue(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3485
0
  offset = dissect_h248_Value(implicit_tag, tvb, offset, actx, tree, hf_index);
3486
3487
0
  return offset;
3488
0
}
3489
3490
3491
static const ber_sequence_t StatisticsParameter_sequence[] = {
3492
  { &hf_h248_statName       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_StatName },
3493
  { &hf_h248_statValue      , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StatValue },
3494
  { NULL, 0, 0, 0, NULL }
3495
};
3496
3497
static unsigned
3498
0
dissect_h248_StatisticsParameter(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3499
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3500
0
                                   StatisticsParameter_sequence, hf_index, ett_h248_StatisticsParameter);
3501
3502
0
  return offset;
3503
0
}
3504
3505
3506
static const ber_sequence_t StatisticsDescriptor_sequence_of[1] = {
3507
  { &hf_h248_StatisticsDescriptor_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_StatisticsParameter },
3508
};
3509
3510
static unsigned
3511
0
dissect_h248_StatisticsDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3512
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3513
0
                                      StatisticsDescriptor_sequence_of, hf_index, ett_h248_StatisticsDescriptor);
3514
3515
0
  return offset;
3516
0
}
3517
3518
3519
static const ber_sequence_t StreamParms_sequence[] = {
3520
  { &hf_h248_localControlDescriptor, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_LocalControlDescriptor },
3521
  { &hf_h248_localDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_LocalRemoteDescriptor },
3522
  { &hf_h248_remoteDescriptor, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_LocalRemoteDescriptor },
3523
  { &hf_h248_sPstatisticsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StatisticsDescriptor },
3524
  { NULL, 0, 0, 0, NULL }
3525
};
3526
3527
static unsigned
3528
0
dissect_h248_StreamParms(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3529
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3530
0
                                   StreamParms_sequence, hf_index, ett_h248_StreamParms);
3531
3532
0
  return offset;
3533
0
}
3534
3535
3536
static const ber_sequence_t StreamDescriptor_sequence[] = {
3537
  { &hf_h248_streamID       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
3538
  { &hf_h248_streamParms    , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_StreamParms },
3539
  { NULL, 0, 0, 0, NULL }
3540
};
3541
3542
static unsigned
3543
0
dissect_h248_StreamDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3544
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3545
0
                                   StreamDescriptor_sequence, hf_index, ett_h248_StreamDescriptor);
3546
3547
0
  return offset;
3548
0
}
3549
3550
3551
static const ber_sequence_t SEQUENCE_OF_StreamDescriptor_sequence_of[1] = {
3552
  { &hf_h248_mediaDescriptorMultiStream_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_StreamDescriptor },
3553
};
3554
3555
static unsigned
3556
0
dissect_h248_SEQUENCE_OF_StreamDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3557
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3558
0
                                      SEQUENCE_OF_StreamDescriptor_sequence_of, hf_index, ett_h248_SEQUENCE_OF_StreamDescriptor);
3559
3560
0
  return offset;
3561
0
}
3562
3563
3564
static const value_string h248_T_streams_vals[] = {
3565
  {   0, "oneStream" },
3566
  {   1, "multiStream" },
3567
  { 0, NULL }
3568
};
3569
3570
static const ber_choice_t T_streams_choice[] = {
3571
  {   0, &hf_h248_mediaDescriptorOneStream, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_StreamParms },
3572
  {   1, &hf_h248_mediaDescriptorMultiStream, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_StreamDescriptor },
3573
  { 0, NULL, 0, 0, 0, NULL }
3574
};
3575
3576
static unsigned
3577
0
dissect_h248_T_streams(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3578
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
3579
0
                                 T_streams_choice, hf_index, ett_h248_T_streams,
3580
0
                                 NULL);
3581
3582
0
  return offset;
3583
0
}
3584
3585
3586
static const ber_sequence_t MediaDescriptor_sequence[] = {
3587
  { &hf_h248_termStateDescr , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TerminationStateDescriptor },
3588
  { &hf_h248_streams        , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_streams },
3589
  { NULL, 0, 0, 0, NULL }
3590
};
3591
3592
static unsigned
3593
0
dissect_h248_MediaDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3594
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3595
0
                                   MediaDescriptor_sequence, hf_index, ett_h248_MediaDescriptor);
3596
3597
0
  return offset;
3598
0
}
3599
3600
3601
static const value_string h248_ModemType_vals[] = {
3602
  {   0, "v18" },
3603
  {   1, "v22" },
3604
  {   2, "v22bis" },
3605
  {   3, "v32" },
3606
  {   4, "v32bis" },
3607
  {   5, "v34" },
3608
  {   6, "v90" },
3609
  {   7, "v91" },
3610
  {   8, "synchISDN" },
3611
  { 0, NULL }
3612
};
3613
3614
3615
static unsigned
3616
0
dissect_h248_ModemType(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3617
0
  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3618
0
                                  NULL);
3619
3620
0
  return offset;
3621
0
}
3622
3623
3624
static const ber_sequence_t SEQUENCE_OF_ModemType_sequence_of[1] = {
3625
  { &hf_h248_mtl_item       , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_h248_ModemType },
3626
};
3627
3628
static unsigned
3629
0
dissect_h248_SEQUENCE_OF_ModemType(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3630
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3631
0
                                      SEQUENCE_OF_ModemType_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ModemType);
3632
3633
0
  return offset;
3634
0
}
3635
3636
3637
3638
static unsigned
3639
0
dissect_h248_OBJECT_IDENTIFIER(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3640
0
  offset = dissect_ber_object_identifier(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
3641
3642
0
  return offset;
3643
0
}
3644
3645
3646
3647
static unsigned
3648
0
dissect_h248_INTEGER_0_255(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3649
0
  offset = dissect_ber_constrained_integer(implicit_tag, actx, tree, tvb, offset,
3650
0
                                                            0U, 255U, hf_index, NULL);
3651
3652
0
  return offset;
3653
0
}
3654
3655
3656
static const ber_sequence_t H221NonStandard_sequence[] = {
3657
  { &hf_h248_t35CountryCode1, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_255 },
3658
  { &hf_h248_t35CountryCode2, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_255 },
3659
  { &hf_h248_t35Extension   , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_255 },
3660
  { &hf_h248_manufacturerCode, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
3661
  { NULL, 0, 0, 0, NULL }
3662
};
3663
3664
static unsigned
3665
0
dissect_h248_H221NonStandard(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3666
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3667
0
                                   H221NonStandard_sequence, hf_index, ett_h248_H221NonStandard);
3668
3669
0
  return offset;
3670
0
}
3671
3672
3673
3674
static unsigned
3675
0
dissect_h248_IA5String_SIZE_8(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3676
0
  offset = dissect_ber_constrained_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
3677
0
                                                        actx, tree, tvb, offset,
3678
0
                                                        8, 8, hf_index, NULL);
3679
3680
0
  return offset;
3681
0
}
3682
3683
3684
static const value_string h248_NonStandardIdentifier_vals[] = {
3685
  {   0, "object" },
3686
  {   1, "h221NonStandard" },
3687
  {   2, "experimental" },
3688
  { 0, NULL }
3689
};
3690
3691
static const ber_choice_t NonStandardIdentifier_choice[] = {
3692
  {   0, &hf_h248_object         , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_OBJECT_IDENTIFIER },
3693
  {   1, &hf_h248_h221NonStandard, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_H221NonStandard },
3694
  {   2, &hf_h248_experimental   , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_IA5String_SIZE_8 },
3695
  { 0, NULL, 0, 0, 0, NULL }
3696
};
3697
3698
static unsigned
3699
0
dissect_h248_NonStandardIdentifier(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3700
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
3701
0
                                 NonStandardIdentifier_choice, hf_index, ett_h248_NonStandardIdentifier,
3702
0
                                 NULL);
3703
3704
0
  return offset;
3705
0
}
3706
3707
3708
static const ber_sequence_t NonStandardData_sequence[] = {
3709
  { &hf_h248_nonStandardIdentifier, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_NonStandardIdentifier },
3710
  { &hf_h248_data           , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_OCTET_STRING },
3711
  { NULL, 0, 0, 0, NULL }
3712
};
3713
3714
static unsigned
3715
0
dissect_h248_NonStandardData(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3716
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3717
0
                                   NonStandardData_sequence, hf_index, ett_h248_NonStandardData);
3718
3719
0
  return offset;
3720
0
}
3721
3722
3723
static const ber_sequence_t ModemDescriptor_sequence[] = {
3724
  { &hf_h248_mtl            , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ModemType },
3725
  { &hf_h248_mpl            , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_PropertyParm },
3726
  { &hf_h248_nonStandardData, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NonStandardData },
3727
  { NULL, 0, 0, 0, NULL }
3728
};
3729
3730
static unsigned
3731
0
dissect_h248_ModemDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3732
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3733
0
                                   ModemDescriptor_sequence, hf_index, ett_h248_ModemDescriptor);
3734
3735
0
  return offset;
3736
0
}
3737
3738
3739
static const value_string h248_MuxType_vals[] = {
3740
  {   0, "h221" },
3741
  {   1, "h223" },
3742
  {   2, "h226" },
3743
  {   3, "v76" },
3744
  {   4, "nx64k" },
3745
  { 0, NULL }
3746
};
3747
3748
3749
static unsigned
3750
0
dissect_h248_MuxType(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3751
0
  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3752
0
                                  NULL);
3753
3754
0
  return offset;
3755
0
}
3756
3757
3758
static const ber_sequence_t SEQUENCE_OF_TerminationID_sequence_of[1] = {
3759
  { &hf_h248_termList_item  , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_TerminationID },
3760
};
3761
3762
static unsigned
3763
0
dissect_h248_SEQUENCE_OF_TerminationID(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3764
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3765
0
                                      SEQUENCE_OF_TerminationID_sequence_of, hf_index, ett_h248_SEQUENCE_OF_TerminationID);
3766
3767
0
  return offset;
3768
0
}
3769
3770
3771
static const ber_sequence_t MuxDescriptor_sequence[] = {
3772
  { &hf_h248_muxType        , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_MuxType },
3773
  { &hf_h248_termList       , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_TerminationID },
3774
  { &hf_h248_nonStandardData, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NonStandardData },
3775
  { NULL, 0, 0, 0, NULL }
3776
};
3777
3778
static unsigned
3779
0
dissect_h248_MuxDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3780
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3781
0
                                   MuxDescriptor_sequence, hf_index, ett_h248_MuxDescriptor);
3782
3783
0
  return offset;
3784
0
}
3785
3786
3787
3788
static unsigned
3789
0
dissect_h248_RequestID(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3790
0
  offset = dissect_ber_constrained_integer(implicit_tag, actx, tree, tvb, offset,
3791
0
                                                            0U, 4294967295U, hf_index, NULL);
3792
3793
0
  return offset;
3794
0
}
3795
3796
3797
3798
3799
static unsigned
3800
0
dissect_h248_Name(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3801
0
  offset = dissect_ber_constrained_octet_string(implicit_tag, actx, tree, tvb, offset,
3802
0
                                                   2, 2, hf_index, NULL);
3803
3804
0
  return offset;
3805
0
}
3806
3807
3808
3809
static unsigned
3810
0
dissect_h248_DigitMapName(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3811
0
  offset = dissect_h248_Name(implicit_tag, tvb, offset, actx, tree, hf_index);
3812
3813
0
  return offset;
3814
0
}
3815
3816
3817
3818
static unsigned
3819
0
dissect_h248_INTEGER_0_99(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3820
0
  offset = dissect_ber_constrained_integer(implicit_tag, actx, tree, tvb, offset,
3821
0
                                                            0U, 99U, hf_index, NULL);
3822
3823
0
  return offset;
3824
0
}
3825
3826
3827
static const ber_sequence_t DigitMapValue_sequence[] = {
3828
  { &hf_h248_startTimer     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
3829
  { &hf_h248_shortTimer     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
3830
  { &hf_h248_longTimer      , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
3831
  { &hf_h248_digitMapBody   , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_IA5String },
3832
  { &hf_h248_durationTimer  , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
3833
  { NULL, 0, 0, 0, NULL }
3834
};
3835
3836
static unsigned
3837
0
dissect_h248_DigitMapValue(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3838
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3839
0
                                   DigitMapValue_sequence, hf_index, ett_h248_DigitMapValue);
3840
3841
0
  return offset;
3842
0
}
3843
3844
3845
static const value_string h248_EventDM_vals[] = {
3846
  {   0, "digitMapName" },
3847
  {   1, "digitMapValue" },
3848
  { 0, NULL }
3849
};
3850
3851
static const ber_choice_t EventDM_choice[] = {
3852
  {   0, &hf_h248_digitMapName   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_DigitMapName },
3853
  {   1, &hf_h248_digitMapValue  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_DigitMapValue },
3854
  { 0, NULL, 0, 0, 0, NULL }
3855
};
3856
3857
static unsigned
3858
0
dissect_h248_EventDM(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3859
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
3860
0
                                 EventDM_choice, hf_index, ett_h248_EventDM,
3861
0
                                 NULL);
3862
3863
0
  return offset;
3864
0
}
3865
3866
3867
3868
static const value_string h248_SignalType_vals[] = {
3869
  {   0, "brief" },
3870
  {   1, "onOff" },
3871
  {   2, "timeOut" },
3872
  { 0, NULL }
3873
};
3874
3875
3876
static unsigned
3877
0
dissect_h248_SignalType(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3878
0
  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3879
0
                                  NULL);
3880
3881
0
  return offset;
3882
0
}
3883
3884
3885
static int * const NotifyCompletion_bits[] = {
3886
  &hf_h248_NotifyCompletion_onTimeOut,
3887
  &hf_h248_NotifyCompletion_onInterruptByEvent,
3888
  &hf_h248_NotifyCompletion_onInterruptByNewSignalDescr,
3889
  &hf_h248_NotifyCompletion_otherReason,
3890
  &hf_h248_NotifyCompletion_onIteration,
3891
  NULL
3892
};
3893
3894
static unsigned
3895
0
dissect_h248_NotifyCompletion(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3896
0
  offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
3897
0
                                    NotifyCompletion_bits, 5, hf_index, ett_h248_NotifyCompletion,
3898
0
                                    NULL);
3899
3900
0
  return offset;
3901
0
}
3902
3903
3904
3905
3906
static const ber_sequence_t SigParamValues_sequence_of[1] = {
3907
  { &hf_h248_SigParamValues_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_SigParamValue },
3908
};
3909
3910
static unsigned
3911
0
dissect_h248_SigParamValues(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3912
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3913
0
                                      SigParamValues_sequence_of, hf_index, ett_h248_SigParamValues);
3914
3915
0
  return offset;
3916
0
}
3917
3918
3919
static const value_string h248_T_extraInfo_vals[] = {
3920
  {   0, "relation" },
3921
  {   1, "range" },
3922
  {   2, "sublist" },
3923
  { 0, NULL }
3924
};
3925
3926
static const ber_choice_t T_extraInfo_choice[] = {
3927
  {   0, &hf_h248_relation       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Relation },
3928
  {   1, &hf_h248_range          , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3929
  {   2, &hf_h248_sublist        , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
3930
  { 0, NULL, 0, 0, 0, NULL }
3931
};
3932
3933
static unsigned
3934
0
dissect_h248_T_extraInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3935
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
3936
0
                                 T_extraInfo_choice, hf_index, ett_h248_T_extraInfo,
3937
0
                                 NULL);
3938
3939
0
  return offset;
3940
0
}
3941
3942
3943
static const ber_sequence_t SigParameter_sequence[] = {
3944
  { &hf_h248_sigParameterName, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SigParameterName },
3945
  { &hf_h248_value          , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SigParamValues },
3946
  { &hf_h248_extraInfo      , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_extraInfo },
3947
  { NULL, 0, 0, 0, NULL }
3948
};
3949
3950
static unsigned
3951
0
dissect_h248_SigParameter(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3952
/* H248 v1 support */
3953
0
  if (h248_version > 1) {
3954
0
      offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
3955
0
                                   SigParameter_sequence, hf_index, ett_h248_SigParameter);
3956
3957
0
} else {
3958
0
  offset = dissect_h248_SigParameterV1( implicit_tag, tvb, offset, actx, tree, hf_index);
3959
0
}
3960
3961
0
  return offset;
3962
0
}
3963
3964
3965
static const ber_sequence_t SEQUENCE_OF_SigParameter_sequence_of[1] = {
3966
  { &hf_h248_sigParList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_SigParameter },
3967
};
3968
3969
static unsigned
3970
0
dissect_h248_SEQUENCE_OF_SigParameter(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3971
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
3972
0
                                      SEQUENCE_OF_SigParameter_sequence_of, hf_index, ett_h248_SEQUENCE_OF_SigParameter);
3973
3974
0
  return offset;
3975
0
}
3976
3977
3978
static const value_string h248_SignalDirection_vals[] = {
3979
  {   0, "internal" },
3980
  {   1, "external" },
3981
  {   2, "both" },
3982
  { 0, NULL }
3983
};
3984
3985
3986
static unsigned
3987
0
dissect_h248_SignalDirection(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3988
0
  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
3989
0
                                  NULL);
3990
3991
0
  return offset;
3992
0
}
3993
3994
3995
static const ber_sequence_t Signal_sequence[] = {
3996
  { &hf_h248_signalName     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SignalName },
3997
  { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
3998
  { &hf_h248_sigType        , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalType },
3999
  { &hf_h248_duration       , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
4000
  { &hf_h248_notifyCompletion, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NotifyCompletion },
4001
  { &hf_h248_keepActive     , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
4002
  { &hf_h248_sigParList     , BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_SigParameter },
4003
  { &hf_h248_direction      , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalDirection },
4004
  { &hf_h248_requestID      , BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
4005
  { &hf_h248_intersigDelay  , BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
4006
  { NULL, 0, 0, 0, NULL }
4007
};
4008
4009
static unsigned
4010
0
dissect_h248_Signal(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4011
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4012
0
                                   Signal_sequence, hf_index, ett_h248_Signal);
4013
4014
0
  return offset;
4015
0
}
4016
4017
4018
static const ber_sequence_t SEQUENCE_OF_Signal_sequence_of[1] = {
4019
  { &hf_h248_signalList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_Signal },
4020
};
4021
4022
static unsigned
4023
0
dissect_h248_SEQUENCE_OF_Signal(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4024
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4025
0
                                      SEQUENCE_OF_Signal_sequence_of, hf_index, ett_h248_SEQUENCE_OF_Signal);
4026
4027
0
  return offset;
4028
0
}
4029
4030
4031
static const ber_sequence_t SeqSigList_sequence[] = {
4032
  { &hf_h248_id             , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
4033
  { &hf_h248_signalList     , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_Signal },
4034
  { NULL, 0, 0, 0, NULL }
4035
};
4036
4037
static unsigned
4038
0
dissect_h248_SeqSigList(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4039
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4040
0
                                   SeqSigList_sequence, hf_index, ett_h248_SeqSigList);
4041
4042
0
  return offset;
4043
0
}
4044
4045
4046
static const value_string h248_SignalRequest_vals[] = {
4047
  {   0, "signal" },
4048
  {   1, "seqSigList" },
4049
  { 0, NULL }
4050
};
4051
4052
static const ber_choice_t SignalRequest_choice[] = {
4053
  {   0, &hf_h248_signal         , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Signal },
4054
  {   1, &hf_h248_seqSigList     , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SeqSigList },
4055
  { 0, NULL, 0, 0, 0, NULL }
4056
};
4057
4058
static unsigned
4059
0
dissect_h248_SignalRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4060
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
4061
0
                                 SignalRequest_choice, hf_index, ett_h248_SignalRequest,
4062
0
                                 NULL);
4063
4064
0
  return offset;
4065
0
}
4066
4067
4068
static const ber_sequence_t SignalsDescriptor_sequence_of[1] = {
4069
  { &hf_h248_SignalsDescriptor_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_SignalRequest },
4070
};
4071
4072
static unsigned
4073
0
dissect_h248_SignalsDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4074
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4075
0
                                      SignalsDescriptor_sequence_of, hf_index, ett_h248_SignalsDescriptor);
4076
4077
0
  return offset;
4078
0
}
4079
4080
4081
static const ber_sequence_t RegulatedEmbeddedDescriptor_sequence[] = {
4082
  { &hf_h248_secondEvent    , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SecondEventsDescriptor },
4083
  { &hf_h248_signalsDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
4084
  { NULL, 0, 0, 0, NULL }
4085
};
4086
4087
static unsigned
4088
0
dissect_h248_RegulatedEmbeddedDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4089
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4090
0
                                   RegulatedEmbeddedDescriptor_sequence, hf_index, ett_h248_RegulatedEmbeddedDescriptor);
4091
4092
0
  return offset;
4093
0
}
4094
4095
4096
static const value_string h248_NotifyBehaviour_vals[] = {
4097
  {   0, "notifyImmediate" },
4098
  {   1, "notifyRegulated" },
4099
  {   2, "neverNotify" },
4100
  { 0, NULL }
4101
};
4102
4103
static const ber_choice_t NotifyBehaviour_choice[] = {
4104
  {   0, &hf_h248_notifyImmediate, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_NULL },
4105
  {   1, &hf_h248_notifyRegulated, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_RegulatedEmbeddedDescriptor },
4106
  {   2, &hf_h248_neverNotify    , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_NULL },
4107
  { 0, NULL, 0, 0, 0, NULL }
4108
};
4109
4110
static unsigned
4111
0
dissect_h248_NotifyBehaviour(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4112
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
4113
0
                                 NotifyBehaviour_choice, hf_index, ett_h248_NotifyBehaviour,
4114
0
                                 NULL);
4115
4116
0
  return offset;
4117
0
}
4118
4119
4120
static const ber_sequence_t SecondRequestedActions_sequence[] = {
4121
  { &hf_h248_keepActive     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
4122
  { &hf_h248_eventDM        , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_EventDM },
4123
  { &hf_h248_signalsDescriptor, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
4124
  { &hf_h248_notifyBehaviour, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_NotifyBehaviour },
4125
  { &hf_h248_resetEventsDescriptor, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
4126
  { NULL, 0, 0, 0, NULL }
4127
};
4128
4129
static unsigned
4130
0
dissect_h248_SecondRequestedActions(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4131
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4132
0
                                   SecondRequestedActions_sequence, hf_index, ett_h248_SecondRequestedActions);
4133
4134
0
  return offset;
4135
0
}
4136
4137
4138
4139
4140
static const ber_sequence_t EventParamValues_sequence_of[1] = {
4141
  { &hf_h248_EventParamValues_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_EventParamValue },
4142
};
4143
4144
static unsigned
4145
0
dissect_h248_EventParamValues(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4146
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4147
0
                                      EventParamValues_sequence_of, hf_index, ett_h248_EventParamValues);
4148
4149
0
  return offset;
4150
0
}
4151
4152
4153
static const value_string h248_EventPar_extraInfo_vals[] = {
4154
  {   0, "relation" },
4155
  {   1, "range" },
4156
  {   2, "sublist" },
4157
  { 0, NULL }
4158
};
4159
4160
static const ber_choice_t EventPar_extraInfo_choice[] = {
4161
  {   0, &hf_h248_relation       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Relation },
4162
  {   1, &hf_h248_range          , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
4163
  {   2, &hf_h248_sublist        , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
4164
  { 0, NULL, 0, 0, 0, NULL }
4165
};
4166
4167
static unsigned
4168
0
dissect_h248_EventPar_extraInfo(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4169
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
4170
0
                                 EventPar_extraInfo_choice, hf_index, ett_h248_EventPar_extraInfo,
4171
0
                                 NULL);
4172
4173
0
  return offset;
4174
0
}
4175
4176
4177
static const ber_sequence_t EventParameter_sequence[] = {
4178
  { &hf_h248_eventParameterName, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventParameterName },
4179
  { &hf_h248_eventParamValue, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_EventParamValues },
4180
  { &hf_h248_eventPar_extraInfo, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_EventPar_extraInfo },
4181
  { NULL, 0, 0, 0, NULL }
4182
};
4183
4184
static unsigned
4185
0
dissect_h248_EventParameter(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4186
/* H248 v1 support */
4187
0
  if (h248_version > 1) {
4188
0
      offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4189
0
                                   EventParameter_sequence, hf_index, ett_h248_EventParameter);
4190
4191
0
} else {
4192
0
  offset = dissect_h248_EventParameterV1( implicit_tag, tvb, offset, actx, tree, hf_index);
4193
0
}
4194
4195
0
  return offset;
4196
0
}
4197
4198
4199
static const ber_sequence_t SEQUENCE_OF_EventParameter_sequence_of[1] = {
4200
  { &hf_h248_eventParList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_EventParameter },
4201
};
4202
4203
static unsigned
4204
0
dissect_h248_SEQUENCE_OF_EventParameter(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4205
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4206
0
                                      SEQUENCE_OF_EventParameter_sequence_of, hf_index, ett_h248_SEQUENCE_OF_EventParameter);
4207
4208
0
  return offset;
4209
0
}
4210
4211
4212
static const ber_sequence_t SecondRequestedEvent_sequence[] = {
4213
  { &hf_h248_pkgdName       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
4214
  { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
4215
  { &hf_h248_secondaryEventAction, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SecondRequestedActions },
4216
  { &hf_h248_evParList      , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_EventParameter },
4217
  { NULL, 0, 0, 0, NULL }
4218
};
4219
4220
static unsigned
4221
0
dissect_h248_SecondRequestedEvent(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4222
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4223
0
                                   SecondRequestedEvent_sequence, hf_index, ett_h248_SecondRequestedEvent);
4224
4225
0
  return offset;
4226
0
}
4227
4228
4229
static const ber_sequence_t SEQUENCE_OF_SecondRequestedEvent_sequence_of[1] = {
4230
  { &hf_h248_secondaryEventList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_SecondRequestedEvent },
4231
};
4232
4233
static unsigned
4234
0
dissect_h248_SEQUENCE_OF_SecondRequestedEvent(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4235
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4236
0
                                      SEQUENCE_OF_SecondRequestedEvent_sequence_of, hf_index, ett_h248_SEQUENCE_OF_SecondRequestedEvent);
4237
4238
0
  return offset;
4239
0
}
4240
4241
4242
static const ber_sequence_t SecondEventsDescriptor_sequence[] = {
4243
  { &hf_h248_requestID      , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
4244
  { &hf_h248_secondaryEventList, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_SecondRequestedEvent },
4245
  { NULL, 0, 0, 0, NULL }
4246
};
4247
4248
static unsigned
4249
0
dissect_h248_SecondEventsDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4250
  // SecondEventsDescriptor -> SecondEventsDescriptor/eventList -> SecondRequestedEvent -> SecondRequestedActions -> NotifyBehaviour -> RegulatedEmbeddedDescriptor -> SecondEventsDescriptor
4251
0
  increment_dissection_depth_by_n(actx->pinfo, 6);
4252
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4253
0
                                   SecondEventsDescriptor_sequence, hf_index, ett_h248_SecondEventsDescriptor);
4254
4255
0
  decrement_dissection_depth_by_n(actx->pinfo, 6);
4256
0
  return offset;
4257
0
}
4258
4259
4260
static const ber_sequence_t RequestedActions_sequence[] = {
4261
  { &hf_h248_keepActive     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_BOOLEAN },
4262
  { &hf_h248_eventDM        , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_EventDM },
4263
  { &hf_h248_secondEvent    , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SecondEventsDescriptor },
4264
  { &hf_h248_signalsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
4265
  { &hf_h248_notifyBehaviour, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_NotifyBehaviour },
4266
  { &hf_h248_resetEventsDescriptor, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
4267
  { NULL, 0, 0, 0, NULL }
4268
};
4269
4270
static unsigned
4271
0
dissect_h248_RequestedActions(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4272
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4273
0
                                   RequestedActions_sequence, hf_index, ett_h248_RequestedActions);
4274
4275
0
  return offset;
4276
0
}
4277
4278
4279
static const ber_sequence_t RequestedEvent_sequence[] = {
4280
  { &hf_h248_eventName      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventName },
4281
  { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
4282
  { &hf_h248_eventAction    , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestedActions },
4283
  { &hf_h248_evParList      , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_EventParameter },
4284
  { NULL, 0, 0, 0, NULL }
4285
};
4286
4287
static unsigned
4288
0
dissect_h248_RequestedEvent(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4289
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4290
0
                                   RequestedEvent_sequence, hf_index, ett_h248_RequestedEvent);
4291
4292
0
  return offset;
4293
0
}
4294
4295
4296
static const ber_sequence_t SEQUENCE_OF_RequestedEvent_sequence_of[1] = {
4297
  { &hf_h248_eventList_item , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_RequestedEvent },
4298
};
4299
4300
static unsigned
4301
0
dissect_h248_SEQUENCE_OF_RequestedEvent(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4302
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4303
0
                                      SEQUENCE_OF_RequestedEvent_sequence_of, hf_index, ett_h248_SEQUENCE_OF_RequestedEvent);
4304
4305
0
  return offset;
4306
0
}
4307
4308
4309
static const ber_sequence_t EventsDescriptor_sequence[] = {
4310
  { &hf_h248_requestID      , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
4311
  { &hf_h248_eventList      , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_RequestedEvent },
4312
  { NULL, 0, 0, 0, NULL }
4313
};
4314
4315
static unsigned
4316
0
dissect_h248_EventsDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4317
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4318
0
                                   EventsDescriptor_sequence, hf_index, ett_h248_EventsDescriptor);
4319
4320
0
  return offset;
4321
0
}
4322
4323
4324
static const ber_sequence_t EventSpec_sequence[] = {
4325
  { &hf_h248_eventName      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventName },
4326
  { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
4327
  { &hf_h248_eventParList   , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_EventParameter },
4328
  { NULL, 0, 0, 0, NULL }
4329
};
4330
4331
static unsigned
4332
0
dissect_h248_EventSpec(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4333
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4334
0
                                   EventSpec_sequence, hf_index, ett_h248_EventSpec);
4335
4336
0
  return offset;
4337
0
}
4338
4339
4340
static const ber_sequence_t EventBufferDescriptor_sequence_of[1] = {
4341
  { &hf_h248_EventBufferDescriptor_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_EventSpec },
4342
};
4343
4344
static unsigned
4345
0
dissect_h248_EventBufferDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4346
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4347
0
                                      EventBufferDescriptor_sequence_of, hf_index, ett_h248_EventBufferDescriptor);
4348
4349
0
  return offset;
4350
0
}
4351
4352
4353
static const ber_sequence_t DigitMapDescriptor_sequence[] = {
4354
  { &hf_h248_digitMapName   , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_DigitMapName },
4355
  { &hf_h248_digitMapValue  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_DigitMapValue },
4356
  { NULL, 0, 0, 0, NULL }
4357
};
4358
4359
static unsigned
4360
0
dissect_h248_DigitMapDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4361
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4362
0
                                   DigitMapDescriptor_sequence, hf_index, ett_h248_DigitMapDescriptor);
4363
4364
0
  return offset;
4365
0
}
4366
4367
4368
static int * const T_auditToken_bits[] = {
4369
  &hf_h248_T_auditToken_muxToken,
4370
  &hf_h248_T_auditToken_modemToken,
4371
  &hf_h248_T_auditToken_mediaToken,
4372
  &hf_h248_T_auditToken_eventsToken,
4373
  &hf_h248_T_auditToken_signalsToken,
4374
  &hf_h248_T_auditToken_digitMapToken,
4375
  &hf_h248_T_auditToken_statsToken,
4376
  &hf_h248_T_auditToken_observedEventsToken,
4377
  &hf_h248_T_auditToken_packagesToken,
4378
  &hf_h248_T_auditToken_eventBufferToken,
4379
  NULL
4380
};
4381
4382
static unsigned
4383
0
dissect_h248_T_auditToken(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4384
0
  offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
4385
0
                                    T_auditToken_bits, 10, hf_index, ett_h248_T_auditToken,
4386
0
                                    NULL);
4387
4388
0
  return offset;
4389
0
}
4390
4391
4392
static const ber_sequence_t IndAudTerminationStateDescriptor_sequence[] = {
4393
  { &hf_h248_indAudPropertyParms, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_IndAudPropertyParm },
4394
  { &hf_h248_eventBufferControl, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
4395
  { &hf_h248_iATSDServiceState, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
4396
  { &hf_h248_serviceStateSel, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ServiceState },
4397
  { NULL, 0, 0, 0, NULL }
4398
};
4399
4400
static unsigned
4401
0
dissect_h248_IndAudTerminationStateDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4402
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4403
0
                                   IndAudTerminationStateDescriptor_sequence, hf_index, ett_h248_IndAudTerminationStateDescriptor);
4404
4405
0
  return offset;
4406
0
}
4407
4408
4409
static const ber_sequence_t IndAudLocalControlDescriptor_sequence[] = {
4410
  { &hf_h248_iALCDStreamMode, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
4411
  { &hf_h248_iALCDReserveValue, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
4412
  { &hf_h248_iALCDReserveGroup, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
4413
  { &hf_h248_indAudPropertyParms, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_IndAudPropertyParm },
4414
  { &hf_h248_streamModeSel  , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamMode },
4415
  { NULL, 0, 0, 0, NULL }
4416
};
4417
4418
static unsigned
4419
0
dissect_h248_IndAudLocalControlDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4420
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4421
0
                                   IndAudLocalControlDescriptor_sequence, hf_index, ett_h248_IndAudLocalControlDescriptor);
4422
4423
0
  return offset;
4424
0
}
4425
4426
4427
static const ber_sequence_t IndAudPropertyGroup_sequence_of[1] = {
4428
  { &hf_h248_IndAudPropertyGroup_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_IndAudPropertyParm },
4429
};
4430
4431
static unsigned
4432
0
dissect_h248_IndAudPropertyGroup(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4433
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4434
0
                                      IndAudPropertyGroup_sequence_of, hf_index, ett_h248_IndAudPropertyGroup);
4435
4436
0
  return offset;
4437
0
}
4438
4439
4440
static const ber_sequence_t IndAudLocalRemoteDescriptor_sequence[] = {
4441
  { &hf_h248_propGroupID    , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
4442
  { &hf_h248_iAPropertyGroup, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IndAudPropertyGroup },
4443
  { NULL, 0, 0, 0, NULL }
4444
};
4445
4446
static unsigned
4447
0
dissect_h248_IndAudLocalRemoteDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4448
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4449
0
                                   IndAudLocalRemoteDescriptor_sequence, hf_index, ett_h248_IndAudLocalRemoteDescriptor);
4450
4451
0
  return offset;
4452
0
}
4453
4454
4455
static const ber_sequence_t IndAudStatisticsDescriptor_sequence[] = {
4456
  { &hf_h248_iAStatName     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
4457
  { NULL, 0, 0, 0, NULL }
4458
};
4459
4460
static unsigned
4461
0
dissect_h248_IndAudStatisticsDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4462
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4463
0
                                   IndAudStatisticsDescriptor_sequence, hf_index, ett_h248_IndAudStatisticsDescriptor);
4464
4465
0
  return offset;
4466
0
}
4467
4468
4469
static const ber_sequence_t IndAudStreamParms_sequence[] = {
4470
  { &hf_h248_iASPLocalControlDescriptor, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudLocalControlDescriptor },
4471
  { &hf_h248_iASPLocalDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudLocalRemoteDescriptor },
4472
  { &hf_h248_iASPRemoteDescriptor, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudLocalRemoteDescriptor },
4473
  { &hf_h248_statisticsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudStatisticsDescriptor },
4474
  { NULL, 0, 0, 0, NULL }
4475
};
4476
4477
static unsigned
4478
0
dissect_h248_IndAudStreamParms(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4479
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4480
0
                                   IndAudStreamParms_sequence, hf_index, ett_h248_IndAudStreamParms);
4481
4482
0
  return offset;
4483
0
}
4484
4485
4486
static const ber_sequence_t IndAudStreamDescriptor_sequence[] = {
4487
  { &hf_h248_streamID       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
4488
  { &hf_h248_indAudStreamParms, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IndAudStreamParms },
4489
  { NULL, 0, 0, 0, NULL }
4490
};
4491
4492
static unsigned
4493
0
dissect_h248_IndAudStreamDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4494
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4495
0
                                   IndAudStreamDescriptor_sequence, hf_index, ett_h248_IndAudStreamDescriptor);
4496
4497
0
  return offset;
4498
0
}
4499
4500
4501
static const ber_sequence_t SEQUENCE_OF_IndAudStreamDescriptor_sequence_of[1] = {
4502
  { &hf_h248_multiStream_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_IndAudStreamDescriptor },
4503
};
4504
4505
static unsigned
4506
0
dissect_h248_SEQUENCE_OF_IndAudStreamDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4507
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4508
0
                                      SEQUENCE_OF_IndAudStreamDescriptor_sequence_of, hf_index, ett_h248_SEQUENCE_OF_IndAudStreamDescriptor);
4509
4510
0
  return offset;
4511
0
}
4512
4513
4514
static const value_string h248_IndAudMediaDescriptorStreams_vals[] = {
4515
  {   0, "oneStream" },
4516
  {   1, "multiStream" },
4517
  { 0, NULL }
4518
};
4519
4520
static const ber_choice_t IndAudMediaDescriptorStreams_choice[] = {
4521
  {   0, &hf_h248_oneStream      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IndAudStreamParms },
4522
  {   1, &hf_h248_multiStream    , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_IndAudStreamDescriptor },
4523
  { 0, NULL, 0, 0, 0, NULL }
4524
};
4525
4526
static unsigned
4527
0
dissect_h248_IndAudMediaDescriptorStreams(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4528
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
4529
0
                                 IndAudMediaDescriptorStreams_choice, hf_index, ett_h248_IndAudMediaDescriptorStreams,
4530
0
                                 NULL);
4531
4532
0
  return offset;
4533
0
}
4534
4535
4536
static const ber_sequence_t IndAudMediaDescriptor_sequence[] = {
4537
  { &hf_h248_indAudTerminationStateDescriptor, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudTerminationStateDescriptor },
4538
  { &hf_h248_indAudMediaDescriptorStreams, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudMediaDescriptorStreams },
4539
  { NULL, 0, 0, 0, NULL }
4540
};
4541
4542
static unsigned
4543
0
dissect_h248_IndAudMediaDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4544
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4545
0
                                   IndAudMediaDescriptor_sequence, hf_index, ett_h248_IndAudMediaDescriptor);
4546
4547
0
  return offset;
4548
0
}
4549
4550
4551
static const ber_sequence_t IndAudEventsDescriptor_sequence[] = {
4552
  { &hf_h248_requestID      , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
4553
  { &hf_h248_iAEDPkgdName   , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
4554
  { &hf_h248_streamID       , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
4555
  { NULL, 0, 0, 0, NULL }
4556
};
4557
4558
static unsigned
4559
0
dissect_h248_IndAudEventsDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4560
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4561
0
                                   IndAudEventsDescriptor_sequence, hf_index, ett_h248_IndAudEventsDescriptor);
4562
4563
0
  return offset;
4564
0
}
4565
4566
4567
static const ber_sequence_t IndAudEventBufferDescriptor_sequence[] = {
4568
  { &hf_h248_iAEBDEventName , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
4569
  { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
4570
  { NULL, 0, 0, 0, NULL }
4571
};
4572
4573
static unsigned
4574
0
dissect_h248_IndAudEventBufferDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4575
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4576
0
                                   IndAudEventBufferDescriptor_sequence, hf_index, ett_h248_IndAudEventBufferDescriptor);
4577
4578
0
  return offset;
4579
0
}
4580
4581
4582
static const ber_sequence_t IndAudSignal_sequence[] = {
4583
  { &hf_h248_iASignalName   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_PkgdName },
4584
  { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
4585
  { &hf_h248_signalRequestID, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
4586
  { NULL, 0, 0, 0, NULL }
4587
};
4588
4589
static unsigned
4590
0
dissect_h248_IndAudSignal(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4591
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4592
0
                                   IndAudSignal_sequence, hf_index, ett_h248_IndAudSignal);
4593
4594
0
  return offset;
4595
0
}
4596
4597
4598
static const ber_sequence_t IndAudSeqSigList_sequence[] = {
4599
  { &hf_h248_id             , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
4600
  { &hf_h248_iASignalList   , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_IndAudSignal },
4601
  { NULL, 0, 0, 0, NULL }
4602
};
4603
4604
static unsigned
4605
0
dissect_h248_IndAudSeqSigList(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4606
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4607
0
                                   IndAudSeqSigList_sequence, hf_index, ett_h248_IndAudSeqSigList);
4608
4609
0
  return offset;
4610
0
}
4611
4612
4613
static const value_string h248_IndAudSignalsDescriptor_vals[] = {
4614
  {   0, "signal" },
4615
  {   1, "seqSigList" },
4616
  { 0, NULL }
4617
};
4618
4619
static const ber_choice_t IndAudSignalsDescriptor_choice[] = {
4620
  {   0, &hf_h248_indAudSignal   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IndAudSignal },
4621
  {   1, &hf_h248_indAudSeqSigList, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IndAudSeqSigList },
4622
  { 0, NULL, 0, 0, 0, NULL }
4623
};
4624
4625
static unsigned
4626
0
dissect_h248_IndAudSignalsDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4627
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
4628
0
                                 IndAudSignalsDescriptor_choice, hf_index, ett_h248_IndAudSignalsDescriptor,
4629
0
                                 NULL);
4630
4631
0
  return offset;
4632
0
}
4633
4634
4635
static const ber_sequence_t IndAudDigitMapDescriptor_sequence[] = {
4636
  { &hf_h248_digitMapName   , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_DigitMapName },
4637
  { NULL, 0, 0, 0, NULL }
4638
};
4639
4640
static unsigned
4641
0
dissect_h248_IndAudDigitMapDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4642
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4643
0
                                   IndAudDigitMapDescriptor_sequence, hf_index, ett_h248_IndAudDigitMapDescriptor);
4644
4645
0
  return offset;
4646
0
}
4647
4648
4649
static const ber_sequence_t IndAudPackagesDescriptor_sequence[] = {
4650
  { &hf_h248_packageName    , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Name },
4651
  { &hf_h248_packageVersion , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
4652
  { NULL, 0, 0, 0, NULL }
4653
};
4654
4655
static unsigned
4656
0
dissect_h248_IndAudPackagesDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4657
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4658
0
                                   IndAudPackagesDescriptor_sequence, hf_index, ett_h248_IndAudPackagesDescriptor);
4659
4660
0
  return offset;
4661
0
}
4662
4663
4664
static const value_string h248_IndAuditParameter_vals[] = {
4665
  {   0, "indaudmediaDescriptor" },
4666
  {   1, "indaudeventsDescriptor" },
4667
  {   2, "indaudeventBufferDescriptor" },
4668
  {   3, "indaudsignalsDescriptor" },
4669
  {   4, "indauddigitMapDescriptor" },
4670
  {   5, "indaudstatisticsDescriptor" },
4671
  {   6, "indaudpackagesDescriptor" },
4672
  { 0, NULL }
4673
};
4674
4675
static const ber_choice_t IndAuditParameter_choice[] = {
4676
  {   0, &hf_h248_indaudmediaDescriptor, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IndAudMediaDescriptor },
4677
  {   1, &hf_h248_indaudeventsDescriptor, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IndAudEventsDescriptor },
4678
  {   2, &hf_h248_indaudeventBufferDescriptor, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_IndAudEventBufferDescriptor },
4679
  {   3, &hf_h248_indaudsignalsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_IndAudSignalsDescriptor },
4680
  {   4, &hf_h248_indauddigitMapDescriptor, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_IndAudDigitMapDescriptor },
4681
  {   5, &hf_h248_indaudstatisticsDescriptor, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_IndAudStatisticsDescriptor },
4682
  {   6, &hf_h248_indaudpackagesDescriptor, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_IndAudPackagesDescriptor },
4683
  { 0, NULL, 0, 0, 0, NULL }
4684
};
4685
4686
static unsigned
4687
0
dissect_h248_IndAuditParameter(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4688
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
4689
0
                                 IndAuditParameter_choice, hf_index, ett_h248_IndAuditParameter,
4690
0
                                 NULL);
4691
4692
0
  return offset;
4693
0
}
4694
4695
4696
static const ber_sequence_t SEQUENCE_OF_IndAuditParameter_sequence_of[1] = {
4697
  { &hf_h248_auditPropertyToken_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_IndAuditParameter },
4698
};
4699
4700
static unsigned
4701
0
dissect_h248_SEQUENCE_OF_IndAuditParameter(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4702
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4703
0
                                      SEQUENCE_OF_IndAuditParameter_sequence_of, hf_index, ett_h248_SEQUENCE_OF_IndAuditParameter);
4704
4705
0
  return offset;
4706
0
}
4707
4708
4709
static const ber_sequence_t AuditDescriptor_sequence[] = {
4710
  { &hf_h248_auditToken     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_auditToken },
4711
  { &hf_h248_auditPropertyToken, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_IndAuditParameter },
4712
  { NULL, 0, 0, 0, NULL }
4713
};
4714
4715
static unsigned
4716
0
dissect_h248_AuditDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4717
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4718
0
                                   AuditDescriptor_sequence, hf_index, ett_h248_AuditDescriptor);
4719
4720
0
  return offset;
4721
0
}
4722
4723
4724
static const value_string h248_AmmDescriptor_vals[] = {
4725
  {   0, "mediaDescriptor" },
4726
  {   1, "modemDescriptor" },
4727
  {   2, "muxDescriptor" },
4728
  {   3, "eventsDescriptor" },
4729
  {   4, "eventBufferDescriptor" },
4730
  {   5, "signalsDescriptor" },
4731
  {   6, "digitMapDescriptor" },
4732
  {   7, "auditDescriptor" },
4733
  {   8, "statisticsDescriptor" },
4734
  { 0, NULL }
4735
};
4736
4737
static const ber_choice_t AmmDescriptor_choice[] = {
4738
  {   0, &hf_h248_mediaDescriptor, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_MediaDescriptor },
4739
  {   1, &hf_h248_modemDescriptor, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_ModemDescriptor },
4740
  {   2, &hf_h248_muxDescriptor  , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_MuxDescriptor },
4741
  {   3, &hf_h248_eventsDescriptor, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_EventsDescriptor },
4742
  {   4, &hf_h248_eventBufferDescriptor, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_EventBufferDescriptor },
4743
  {   5, &hf_h248_signalsDescriptor, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
4744
  {   6, &hf_h248_digitMapDescriptor, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_DigitMapDescriptor },
4745
  {   7, &hf_h248_auditDescriptor, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_h248_AuditDescriptor },
4746
  {   8, &hf_h248_aDstatisticsDescriptor, BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_h248_StatisticsDescriptor },
4747
  { 0, NULL, 0, 0, 0, NULL }
4748
};
4749
4750
static unsigned
4751
0
dissect_h248_AmmDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4752
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
4753
0
                                 AmmDescriptor_choice, hf_index, ett_h248_AmmDescriptor,
4754
0
                                 NULL);
4755
4756
0
  return offset;
4757
0
}
4758
4759
4760
static const ber_sequence_t SEQUENCE_OF_AmmDescriptor_sequence_of[1] = {
4761
  { &hf_h248_descriptors_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_AmmDescriptor },
4762
};
4763
4764
static unsigned
4765
0
dissect_h248_SEQUENCE_OF_AmmDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4766
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4767
0
                                      SEQUENCE_OF_AmmDescriptor_sequence_of, hf_index, ett_h248_SEQUENCE_OF_AmmDescriptor);
4768
4769
0
  return offset;
4770
0
}
4771
4772
4773
static const ber_sequence_t AmmRequest_sequence[] = {
4774
  { &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
4775
  { &hf_h248_descriptors    , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_AmmDescriptor },
4776
  { NULL, 0, 0, 0, NULL }
4777
};
4778
4779
static unsigned
4780
0
dissect_h248_AmmRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4781
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4782
0
                                   AmmRequest_sequence, hf_index, ett_h248_AmmRequest);
4783
4784
0
  return offset;
4785
0
}
4786
4787
4788
4789
static unsigned
4790
0
dissect_h248_T_addReq(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4791
0
    curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_ADD_REQ,offset,actx->pinfo,keep_persistent_data);
4792
0
      H248_TAP();
4793
0
  offset = dissect_h248_AmmRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
4794
4795
0
      curr_info.cmd = NULL;
4796
0
  return offset;
4797
0
}
4798
4799
4800
4801
static unsigned
4802
0
dissect_h248_T_moveReq(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4803
0
    curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOVE_REQ,offset,actx->pinfo,keep_persistent_data);
4804
0
      H248_TAP();
4805
4806
0
  offset = dissect_h248_AmmRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
4807
4808
0
      curr_info.cmd = NULL;
4809
0
  return offset;
4810
0
}
4811
4812
4813
4814
static unsigned
4815
0
dissect_h248_T_modReq(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4816
0
    curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOD_REQ,offset,actx->pinfo,keep_persistent_data);
4817
0
      H248_TAP();
4818
0
  offset = dissect_h248_AmmRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
4819
4820
0
      curr_info.cmd = NULL;
4821
0
  return offset;
4822
0
}
4823
4824
4825
static const ber_sequence_t SubtractRequest_sequence[] = {
4826
  { &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
4827
  { &hf_h248_auditDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_AuditDescriptor },
4828
  { NULL, 0, 0, 0, NULL }
4829
};
4830
4831
static unsigned
4832
0
dissect_h248_SubtractRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4833
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4834
0
                                   SubtractRequest_sequence, hf_index, ett_h248_SubtractRequest);
4835
4836
0
  return offset;
4837
0
}
4838
4839
4840
4841
static unsigned
4842
0
dissect_h248_T_subtractReq(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4843
0
    curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SUB_REQ,offset,actx->pinfo,keep_persistent_data);
4844
0
      H248_TAP();
4845
0
  offset = dissect_h248_SubtractRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
4846
4847
0
      curr_info.cmd = NULL;
4848
0
  return offset;
4849
0
}
4850
4851
4852
static const ber_sequence_t AuditRequest_sequence[] = {
4853
  { &hf_h248_terminationID  , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
4854
  { &hf_h248_auditDescriptor, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_AuditDescriptor },
4855
  { &hf_h248_terminationIDList, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
4856
  { NULL, 0, 0, 0, NULL }
4857
};
4858
4859
static unsigned
4860
0
dissect_h248_AuditRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4861
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4862
0
                                   AuditRequest_sequence, hf_index, ett_h248_AuditRequest);
4863
4864
0
  return offset;
4865
0
}
4866
4867
4868
4869
static unsigned
4870
0
dissect_h248_T_auditCapRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4871
0
    curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITCAP_REQ,offset,actx->pinfo,keep_persistent_data);
4872
0
      H248_TAP();
4873
0
  offset = dissect_h248_AuditRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
4874
4875
0
      curr_info.cmd = NULL;
4876
0
  return offset;
4877
0
}
4878
4879
4880
4881
static unsigned
4882
0
dissect_h248_T_auditValueRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4883
0
    curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITVAL_REQ,offset,actx->pinfo,keep_persistent_data);
4884
0
      H248_TAP();
4885
0
  offset = dissect_h248_AuditRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
4886
4887
0
      curr_info.cmd = NULL;
4888
0
  return offset;
4889
0
}
4890
4891
4892
static const ber_sequence_t TimeNotation_sequence[] = {
4893
  { &hf_h248_date           , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IA5String_SIZE_8 },
4894
  { &hf_h248_time           , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IA5String_SIZE_8 },
4895
  { NULL, 0, 0, 0, NULL }
4896
};
4897
4898
static unsigned
4899
0
dissect_h248_TimeNotation(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4900
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4901
0
                                   TimeNotation_sequence, hf_index, ett_h248_TimeNotation);
4902
4903
0
  return offset;
4904
0
}
4905
4906
4907
static const ber_sequence_t ObservedEvent_sequence[] = {
4908
  { &hf_h248_eventName      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventName },
4909
  { &hf_h248_streamID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_StreamID },
4910
  { &hf_h248_eventParList   , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_EventParameter },
4911
  { &hf_h248_timeNotation   , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TimeNotation },
4912
  { NULL, 0, 0, 0, NULL }
4913
};
4914
4915
static unsigned
4916
0
dissect_h248_ObservedEvent(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4917
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4918
0
                                   ObservedEvent_sequence, hf_index, ett_h248_ObservedEvent);
4919
4920
0
  return offset;
4921
0
}
4922
4923
4924
static const ber_sequence_t SEQUENCE_OF_ObservedEvent_sequence_of[1] = {
4925
  { &hf_h248_observedEventLst_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_ObservedEvent },
4926
};
4927
4928
static unsigned
4929
0
dissect_h248_SEQUENCE_OF_ObservedEvent(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4930
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
4931
0
                                      SEQUENCE_OF_ObservedEvent_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ObservedEvent);
4932
4933
0
  return offset;
4934
0
}
4935
4936
4937
static const ber_sequence_t ObservedEventsDescriptor_sequence[] = {
4938
  { &hf_h248_requestId      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_RequestID },
4939
  { &hf_h248_observedEventLst, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ObservedEvent },
4940
  { NULL, 0, 0, 0, NULL }
4941
};
4942
4943
static unsigned
4944
0
dissect_h248_ObservedEventsDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4945
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4946
0
                                   ObservedEventsDescriptor_sequence, hf_index, ett_h248_ObservedEventsDescriptor);
4947
4948
0
  return offset;
4949
0
}
4950
4951
4952
static const ber_sequence_t NotifyRequest_sequence[] = {
4953
  { &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
4954
  { &hf_h248_observedEventsDescriptor, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_ObservedEventsDescriptor },
4955
  { &hf_h248_errorDescriptor, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
4956
  { NULL, 0, 0, 0, NULL }
4957
};
4958
4959
static unsigned
4960
0
dissect_h248_NotifyRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4961
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
4962
0
                                   NotifyRequest_sequence, hf_index, ett_h248_NotifyRequest);
4963
4964
0
  return offset;
4965
0
}
4966
4967
4968
4969
static unsigned
4970
0
dissect_h248_T_notifyReq(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4971
0
    curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_NOTIFY_REQ,offset,actx->pinfo,keep_persistent_data);
4972
0
      H248_TAP();
4973
0
  offset = dissect_h248_NotifyRequest(implicit_tag, tvb, offset, actx, tree, hf_index);
4974
4975
0
      curr_info.cmd = NULL;
4976
0
  return offset;
4977
0
}
4978
4979
4980
static const value_string h248_ServiceChangeMethod_vals[] = {
4981
  {   0, "failover" },
4982
  {   1, "forced" },
4983
  {   2, "graceful" },
4984
  {   3, "restart" },
4985
  {   4, "disconnected" },
4986
  {   5, "handOff" },
4987
  { 0, NULL }
4988
};
4989
4990
4991
static unsigned
4992
0
dissect_h248_ServiceChangeMethod(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
4993
0
  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
4994
0
                                  NULL);
4995
4996
0
  return offset;
4997
0
}
4998
4999
5000
static const value_string h248_ServiceChangeAddress_vals[] = {
5001
  {   0, "portNumber" },
5002
  {   1, "ip4Address" },
5003
  {   2, "ip6Address" },
5004
  {   3, "domainName" },
5005
  {   4, "deviceName" },
5006
  {   5, "mtpAddress" },
5007
  { 0, NULL }
5008
};
5009
5010
static const ber_choice_t ServiceChangeAddress_choice[] = {
5011
  {   0, &hf_h248_portNumber     , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_65535 },
5012
  {   1, &hf_h248_ip4Address     , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_IP4Address },
5013
  {   2, &hf_h248_ip6Address     , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_IP6Address },
5014
  {   3, &hf_h248_domainName     , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_DomainName },
5015
  {   4, &hf_h248_deviceName     , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_PathName },
5016
  {   5, &hf_h248_mtpAddress     , BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_MtpAddress },
5017
  { 0, NULL, 0, 0, 0, NULL }
5018
};
5019
5020
static unsigned
5021
0
dissect_h248_ServiceChangeAddress(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5022
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
5023
0
                                 ServiceChangeAddress_choice, hf_index, ett_h248_ServiceChangeAddress,
5024
0
                                 NULL);
5025
5026
0
  return offset;
5027
0
}
5028
5029
5030
5031
static unsigned
5032
0
dissect_h248_IA5String_SIZE_1_67(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5033
0
  offset = dissect_ber_constrained_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
5034
0
                                                        actx, tree, tvb, offset,
5035
0
                                                        1, 67, hf_index, NULL);
5036
5037
0
  return offset;
5038
0
}
5039
5040
5041
static const ber_sequence_t ServiceChangeProfile_sequence[] = {
5042
  { &hf_h248_profileName    , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_IA5String_SIZE_1_67 },
5043
  { NULL, 0, 0, 0, NULL }
5044
};
5045
5046
static unsigned
5047
0
dissect_h248_ServiceChangeProfile(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5048
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5049
0
                                   ServiceChangeProfile_sequence, hf_index, ett_h248_ServiceChangeProfile);
5050
5051
0
  return offset;
5052
0
}
5053
5054
5055
5056
static unsigned
5057
0
dissect_h248_SCreasonValueOctetStr(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5058
0
 tvbuff_t *parameter_tvb;
5059
0
   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
5060
0
                                       &parameter_tvb);
5061
5062
5063
0
 if (!parameter_tvb)
5064
0
  return offset;
5065
5066
0
 dissect_h248_ServiceChangeReasonStr(false, parameter_tvb, 0, actx, tree, hf_h248_serviceChangeReasonStr);
5067
5068
0
  return offset;
5069
0
}
5070
5071
5072
static const ber_sequence_t SCreasonValue_sequence_of[1] = {
5073
  { &hf_h248_SCreasonValue_item, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_h248_SCreasonValueOctetStr },
5074
};
5075
5076
static unsigned
5077
0
dissect_h248_SCreasonValue(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5078
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
5079
0
                                      SCreasonValue_sequence_of, hf_index, ett_h248_SCreasonValue);
5080
5081
0
  return offset;
5082
0
}
5083
5084
5085
5086
static unsigned
5087
0
dissect_h248_INTEGER_0_4294967295(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5088
0
  offset = dissect_ber_constrained_integer(implicit_tag, actx, tree, tvb, offset,
5089
0
                                                            0U, 4294967295U, hf_index, NULL);
5090
5091
0
  return offset;
5092
0
}
5093
5094
5095
static const ber_sequence_t ServiceChangeParm_sequence[] = {
5096
  { &hf_h248_serviceChangeMethod, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeMethod },
5097
  { &hf_h248_serviceChangeAddress, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_ServiceChangeAddress },
5098
  { &hf_h248_serviceChangeVersion, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
5099
  { &hf_h248_serviceChangeProfile, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeProfile },
5100
  { &hf_h248_serviceChangeReason, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_SCreasonValue },
5101
  { &hf_h248_serviceChangeDelay, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_4294967295 },
5102
  { &hf_h248_serviceChangeMgcId, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_MId },
5103
  { &hf_h248_timeStamp      , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TimeNotation },
5104
  { &hf_h248_nonStandardData, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NonStandardData },
5105
  { &hf_h248_serviceChangeInfo, BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_AuditDescriptor },
5106
  { &hf_h248_serviceChangeIncompleteFlag, BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
5107
  { NULL, 0, 0, 0, NULL }
5108
};
5109
5110
static unsigned
5111
0
dissect_h248_ServiceChangeParm(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5112
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5113
0
                                   ServiceChangeParm_sequence, hf_index, ett_h248_ServiceChangeParm);
5114
5115
0
  return offset;
5116
0
}
5117
5118
5119
static const ber_sequence_t ServiceChangeRequest_sequence[] = {
5120
  { &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
5121
  { &hf_h248_serviceChangeParms, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeParm },
5122
  { NULL, 0, 0, 0, NULL }
5123
};
5124
5125
static unsigned
5126
0
dissect_h248_ServiceChangeRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5127
0
      curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SVCCHG_REQ,offset,actx->pinfo,keep_persistent_data);
5128
0
      H248_TAP();
5129
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5130
0
                                   ServiceChangeRequest_sequence, hf_index, ett_h248_ServiceChangeRequest);
5131
5132
0
      curr_info.cmd = NULL;
5133
0
  return offset;
5134
0
}
5135
5136
5137
static const value_string h248_Command_vals[] = {
5138
  {   0, "addReq" },
5139
  {   1, "moveReq" },
5140
  {   2, "modReq" },
5141
  {   3, "subtractReq" },
5142
  {   4, "auditCapRequest" },
5143
  {   5, "auditValueRequest" },
5144
  {   6, "notifyReq" },
5145
  {   7, "serviceChangeReq" },
5146
  { 0, NULL }
5147
};
5148
5149
static const ber_choice_t Command_choice[] = {
5150
  {   0, &hf_h248_addReq         , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_addReq },
5151
  {   1, &hf_h248_moveReq        , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_T_moveReq },
5152
  {   2, &hf_h248_modReq         , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_T_modReq },
5153
  {   3, &hf_h248_subtractReq    , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_T_subtractReq },
5154
  {   4, &hf_h248_auditCapRequest, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_T_auditCapRequest },
5155
  {   5, &hf_h248_auditValueRequest, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_T_auditValueRequest },
5156
  {   6, &hf_h248_notifyReq      , BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_T_notifyReq },
5157
  {   7, &hf_h248_serviceChangeReq, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeRequest },
5158
  { 0, NULL, 0, 0, 0, NULL }
5159
};
5160
5161
static unsigned
5162
0
dissect_h248_Command(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5163
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
5164
0
                                 Command_choice, hf_index, ett_h248_Command,
5165
0
                                 NULL);
5166
5167
0
  return offset;
5168
0
}
5169
5170
5171
static const ber_sequence_t CommandRequest_sequence[] = {
5172
  { &hf_h248_command        , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_Command },
5173
  { &hf_h248_optional       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
5174
  { &hf_h248_wildcardReturn , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
5175
  { NULL, 0, 0, 0, NULL }
5176
};
5177
5178
static unsigned
5179
0
dissect_h248_CommandRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5180
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5181
0
                                   CommandRequest_sequence, hf_index, ett_h248_CommandRequest);
5182
5183
0
  return offset;
5184
0
}
5185
5186
5187
static const ber_sequence_t SEQUENCE_OF_CommandRequest_sequence_of[1] = {
5188
  { &hf_h248_commandRequests_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_CommandRequest },
5189
};
5190
5191
static unsigned
5192
0
dissect_h248_SEQUENCE_OF_CommandRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5193
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
5194
0
                                      SEQUENCE_OF_CommandRequest_sequence_of, hf_index, ett_h248_SEQUENCE_OF_CommandRequest);
5195
5196
0
  return offset;
5197
0
}
5198
5199
5200
static const ber_sequence_t ActionRequest_sequence[] = {
5201
  { &hf_h248_contextId      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ContextId },
5202
  { &hf_h248_contextRequest , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ContextRequest },
5203
  { &hf_h248_contextAttrAuditReq, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_T_contextAttrAuditReq },
5204
  { &hf_h248_commandRequests, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_CommandRequest },
5205
  { NULL, 0, 0, 0, NULL }
5206
};
5207
5208
static unsigned
5209
0
dissect_h248_ActionRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5210
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5211
0
                                   ActionRequest_sequence, hf_index, ett_h248_ActionRequest);
5212
5213
0
  return offset;
5214
0
}
5215
5216
5217
static const ber_sequence_t SEQUENCE_OF_ActionRequest_sequence_of[1] = {
5218
  { &hf_h248_actions_item   , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_ActionRequest },
5219
};
5220
5221
static unsigned
5222
0
dissect_h248_SEQUENCE_OF_ActionRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5223
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
5224
0
                                      SEQUENCE_OF_ActionRequest_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ActionRequest);
5225
5226
0
  return offset;
5227
0
}
5228
5229
5230
static const ber_sequence_t TransactionRequest_sequence[] = {
5231
  { &hf_h248_transactionId  , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_transactionId },
5232
  { &hf_h248_actions        , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ActionRequest },
5233
  { NULL, 0, 0, 0, NULL }
5234
};
5235
5236
static unsigned
5237
0
dissect_h248_TransactionRequest(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5238
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5239
0
                                   TransactionRequest_sequence, hf_index, ett_h248_TransactionRequest);
5240
5241
0
  return offset;
5242
0
}
5243
5244
5245
5246
static unsigned
5247
0
dissect_h248_T_tpend_transactionId(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5248
0
    uint32_t trx_id = 0;
5249
0
  offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id);
5250
0
    curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_PENDING, actx->pinfo, keep_persistent_data);
5251
0
    error_code = 0;
5252
5253
5254
0
  return offset;
5255
0
}
5256
5257
5258
static const ber_sequence_t TransactionPending_sequence[] = {
5259
  { &hf_h248_tpend_transactionId, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_tpend_transactionId },
5260
  { NULL, 0, 0, 0, NULL }
5261
};
5262
5263
static unsigned
5264
0
dissect_h248_TransactionPending(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5265
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5266
0
                                   TransactionPending_sequence, hf_index, ett_h248_TransactionPending);
5267
5268
0
  return offset;
5269
0
}
5270
5271
5272
5273
static unsigned
5274
0
dissect_h248_T_trep_transactionId(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5275
0
    uint32_t trx_id = 0;
5276
0
  offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id);
5277
0
    curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_REPLY, actx->pinfo, keep_persistent_data);
5278
0
    error_code = 0;
5279
5280
5281
0
  return offset;
5282
0
}
5283
5284
5285
static const ber_sequence_t PackagesItem_sequence[] = {
5286
  { &hf_h248_packageName    , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_Name },
5287
  { &hf_h248_packageVersion , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
5288
  { NULL, 0, 0, 0, NULL }
5289
};
5290
5291
static unsigned
5292
0
dissect_h248_PackagesItem(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5293
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5294
0
                                   PackagesItem_sequence, hf_index, ett_h248_PackagesItem);
5295
5296
0
  return offset;
5297
0
}
5298
5299
5300
static const ber_sequence_t PackagesDescriptor_sequence_of[1] = {
5301
  { &hf_h248_PackagesDescriptor_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_PackagesItem },
5302
};
5303
5304
static unsigned
5305
0
dissect_h248_PackagesDescriptor(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5306
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
5307
0
                                      PackagesDescriptor_sequence_of, hf_index, ett_h248_PackagesDescriptor);
5308
5309
0
  return offset;
5310
0
}
5311
5312
5313
static const value_string h248_AuditReturnParameter_vals[] = {
5314
  {   0, "errorDescriptor" },
5315
  {   1, "mediaDescriptor" },
5316
  {   2, "modemDescriptor" },
5317
  {   3, "muxDescriptor" },
5318
  {   4, "eventsDescriptor" },
5319
  {   5, "eventBufferDescriptor" },
5320
  {   6, "signalsDescriptor" },
5321
  {   7, "digitMapDescriptor" },
5322
  {   8, "observedEventsDescriptor" },
5323
  {   9, "statisticsDescriptor" },
5324
  {  10, "packagesDescriptor" },
5325
  {  11, "emptyDescriptors" },
5326
  { 0, NULL }
5327
};
5328
5329
static const ber_choice_t AuditReturnParameter_choice[] = {
5330
  {   0, &hf_h248_errorDescriptor, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
5331
  {   1, &hf_h248_mediaDescriptor, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_MediaDescriptor },
5332
  {   2, &hf_h248_modemDescriptor, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_ModemDescriptor },
5333
  {   3, &hf_h248_muxDescriptor  , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_MuxDescriptor },
5334
  {   4, &hf_h248_eventsDescriptor, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_EventsDescriptor },
5335
  {   5, &hf_h248_eventBufferDescriptor, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_EventBufferDescriptor },
5336
  {   6, &hf_h248_signalsDescriptor, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_SignalsDescriptor },
5337
  {   7, &hf_h248_digitMapDescriptor, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_h248_DigitMapDescriptor },
5338
  {   8, &hf_h248_observedEventsDescriptor, BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_h248_ObservedEventsDescriptor },
5339
  {   9, &hf_h248_aRPstatisticsDescriptor, BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_h248_StatisticsDescriptor },
5340
  {  10, &hf_h248_packagesDescriptor, BER_CLASS_CON, 10, BER_FLAGS_IMPLTAG, dissect_h248_PackagesDescriptor },
5341
  {  11, &hf_h248_emptyDescriptors, BER_CLASS_CON, 11, BER_FLAGS_IMPLTAG, dissect_h248_AuditDescriptor },
5342
  { 0, NULL, 0, 0, 0, NULL }
5343
};
5344
5345
static unsigned
5346
0
dissect_h248_AuditReturnParameter(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5347
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
5348
0
                                 AuditReturnParameter_choice, hf_index, ett_h248_AuditReturnParameter,
5349
0
                                 NULL);
5350
5351
0
  return offset;
5352
0
}
5353
5354
5355
static const ber_sequence_t TerminationAudit_sequence_of[1] = {
5356
  { &hf_h248_TerminationAudit_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_AuditReturnParameter },
5357
};
5358
5359
static unsigned
5360
0
dissect_h248_TerminationAudit(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5361
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
5362
0
                                      TerminationAudit_sequence_of, hf_index, ett_h248_TerminationAudit);
5363
5364
0
  return offset;
5365
0
}
5366
5367
5368
static const ber_sequence_t AmmsReply_sequence[] = {
5369
  { &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
5370
  { &hf_h248_terminationAudit, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TerminationAudit },
5371
  { NULL, 0, 0, 0, NULL }
5372
};
5373
5374
static unsigned
5375
0
dissect_h248_AmmsReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5376
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5377
0
                                   AmmsReply_sequence, hf_index, ett_h248_AmmsReply);
5378
5379
0
  return offset;
5380
0
}
5381
5382
5383
5384
static unsigned
5385
0
dissect_h248_T_addReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5386
0
      curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_ADD_REPLY,offset,actx->pinfo,keep_persistent_data);
5387
0
      H248_TAP();
5388
0
  offset = dissect_h248_AmmsReply(implicit_tag, tvb, offset, actx, tree, hf_index);
5389
5390
0
  return offset;
5391
0
}
5392
5393
5394
5395
static unsigned
5396
0
dissect_h248_T_moveReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5397
0
      curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOVE_REPLY,offset,actx->pinfo,keep_persistent_data);
5398
0
      H248_TAP();
5399
0
  offset = dissect_h248_AmmsReply(implicit_tag, tvb, offset, actx, tree, hf_index);
5400
5401
0
  return offset;
5402
0
}
5403
5404
5405
5406
static unsigned
5407
0
dissect_h248_T_modReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5408
0
      curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_MOD_REPLY,offset,actx->pinfo,keep_persistent_data);
5409
0
      H248_TAP();
5410
0
  offset = dissect_h248_AmmsReply(implicit_tag, tvb, offset, actx, tree, hf_index);
5411
5412
0
  return offset;
5413
0
}
5414
5415
5416
5417
static unsigned
5418
0
dissect_h248_T_subtractReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5419
0
      curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SUB_REPLY,offset,actx->pinfo,keep_persistent_data);
5420
0
      H248_TAP();
5421
0
  offset = dissect_h248_AmmsReply(implicit_tag, tvb, offset, actx, tree, hf_index);
5422
5423
0
  return offset;
5424
0
}
5425
5426
5427
static const ber_sequence_t AuditResult_sequence[] = {
5428
  { &hf_h248_terminationID  , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
5429
  { &hf_h248_terminationAuditResult, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_TerminationAudit },
5430
  { NULL, 0, 0, 0, NULL }
5431
};
5432
5433
static unsigned
5434
0
dissect_h248_AuditResult(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5435
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5436
0
                                   AuditResult_sequence, hf_index, ett_h248_AuditResult);
5437
5438
0
  return offset;
5439
0
}
5440
5441
5442
static const ber_sequence_t TermListAuditResult_sequence[] = {
5443
  { &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
5444
  { &hf_h248_terminationAuditResult, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_TerminationAudit },
5445
  { NULL, 0, 0, 0, NULL }
5446
};
5447
5448
static unsigned
5449
0
dissect_h248_TermListAuditResult(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5450
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5451
0
                                   TermListAuditResult_sequence, hf_index, ett_h248_TermListAuditResult);
5452
5453
0
  return offset;
5454
0
}
5455
5456
5457
static const value_string h248_AuditReply_vals[] = {
5458
  {   0, "contextAuditResult" },
5459
  {   1, "error" },
5460
  {   2, "auditResult" },
5461
  {   3, "auditResultTermList" },
5462
  { 0, NULL }
5463
};
5464
5465
static const ber_choice_t AuditReply_choice[] = {
5466
  {   0, &hf_h248_contextAuditResult, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
5467
  {   1, &hf_h248_error          , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
5468
  {   2, &hf_h248_auditResult    , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_AuditResult },
5469
  {   3, &hf_h248_auditResultTermList, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_TermListAuditResult },
5470
  { 0, NULL, 0, 0, 0, NULL }
5471
};
5472
5473
static unsigned
5474
0
dissect_h248_AuditReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5475
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
5476
0
                                 AuditReply_choice, hf_index, ett_h248_AuditReply,
5477
0
                                 NULL);
5478
5479
0
  return offset;
5480
0
}
5481
5482
5483
5484
static unsigned
5485
0
dissect_h248_T_auditCapReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5486
0
      curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITCAP_REPLY,offset,actx->pinfo,keep_persistent_data);
5487
0
      H248_TAP();
5488
/* h248v1 support */
5489
0
  if(h248_version > 1) {
5490
0
      offset = dissect_h248_AuditReply(implicit_tag, tvb, offset, actx, tree, hf_index);
5491
5492
0
} else {
5493
  /* call V1 of the dissector */
5494
0
  offset = dissect_h248_AuditReplyV1(implicit_tag, tvb, offset, actx, tree, hf_index);
5495
0
}
5496
5497
0
  return offset;
5498
0
}
5499
5500
5501
5502
static unsigned
5503
0
dissect_h248_T_auditValueReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5504
0
      curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_AUDITVAL_REPLY,offset,actx->pinfo,keep_persistent_data);
5505
0
      H248_TAP();
5506
/* h248v1 support */
5507
0
  if(h248_version > 1) {
5508
0
      offset = dissect_h248_AuditReply(implicit_tag, tvb, offset, actx, tree, hf_index);
5509
5510
0
} else {
5511
  /* call V1 of the dissector */
5512
0
  offset = dissect_h248_AuditReplyV1(implicit_tag, tvb, offset, actx, tree, hf_index);
5513
0
}
5514
5515
0
  return offset;
5516
0
}
5517
5518
5519
static const ber_sequence_t NotifyReply_sequence[] = {
5520
  { &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
5521
  { &hf_h248_errorDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
5522
  { NULL, 0, 0, 0, NULL }
5523
};
5524
5525
static unsigned
5526
0
dissect_h248_NotifyReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5527
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5528
0
                                   NotifyReply_sequence, hf_index, ett_h248_NotifyReply);
5529
5530
0
  return offset;
5531
0
}
5532
5533
5534
5535
static unsigned
5536
0
dissect_h248_T_notifyReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5537
0
      curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_NOTIFY_REPLY,offset,actx->pinfo,keep_persistent_data);
5538
0
      H248_TAP();
5539
0
  offset = dissect_h248_NotifyReply(implicit_tag, tvb, offset, actx, tree, hf_index);
5540
5541
0
  return offset;
5542
0
}
5543
5544
5545
static const ber_sequence_t ServiceChangeResParm_sequence[] = {
5546
  { &hf_h248_serviceChangeMgcId, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_MId },
5547
  { &hf_h248_serviceChangeAddress, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_ServiceChangeAddress },
5548
  { &hf_h248_serviceChangeVersion, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_INTEGER_0_99 },
5549
  { &hf_h248_serviceChangeProfile, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeProfile },
5550
  { &hf_h248_timestamp      , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TimeNotation },
5551
  { NULL, 0, 0, 0, NULL }
5552
};
5553
5554
static unsigned
5555
0
dissect_h248_ServiceChangeResParm(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5556
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5557
0
                                   ServiceChangeResParm_sequence, hf_index, ett_h248_ServiceChangeResParm);
5558
5559
0
  return offset;
5560
0
}
5561
5562
5563
static const value_string h248_ServiceChangeResult_vals[] = {
5564
  {   0, "errorDescriptor" },
5565
  {   1, "serviceChangeResParms" },
5566
  { 0, NULL }
5567
};
5568
5569
static const ber_choice_t ServiceChangeResult_choice[] = {
5570
  {   0, &hf_h248_errorDescriptor, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
5571
  {   1, &hf_h248_serviceChangeResParms, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeResParm },
5572
  { 0, NULL, 0, 0, 0, NULL }
5573
};
5574
5575
static unsigned
5576
0
dissect_h248_ServiceChangeResult(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5577
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
5578
0
                                 ServiceChangeResult_choice, hf_index, ett_h248_ServiceChangeResult,
5579
0
                                 NULL);
5580
5581
0
  return offset;
5582
0
}
5583
5584
5585
static const ber_sequence_t ServiceChangeReply_sequence[] = {
5586
  { &hf_h248_terminationIDList, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationIDList },
5587
  { &hf_h248_serviceChangeResult, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_ServiceChangeResult },
5588
  { NULL, 0, 0, 0, NULL }
5589
};
5590
5591
static unsigned
5592
0
dissect_h248_ServiceChangeReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5593
0
      curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_SVCCHG_REPLY,offset,actx->pinfo,keep_persistent_data);
5594
0
      H248_TAP();
5595
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5596
0
                                   ServiceChangeReply_sequence, hf_index, ett_h248_ServiceChangeReply);
5597
5598
0
  return offset;
5599
0
}
5600
5601
5602
static const value_string h248_CommandReply_vals[] = {
5603
  {   0, "addReply" },
5604
  {   1, "moveReply" },
5605
  {   2, "modReply" },
5606
  {   3, "subtractReply" },
5607
  {   4, "auditCapReply" },
5608
  {   5, "auditValueReply" },
5609
  {   6, "notifyReply" },
5610
  {   7, "serviceChangeReply" },
5611
  { 0, NULL }
5612
};
5613
5614
static const ber_choice_t CommandReply_choice[] = {
5615
  {   0, &hf_h248_addReply       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_addReply },
5616
  {   1, &hf_h248_moveReply      , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_T_moveReply },
5617
  {   2, &hf_h248_modReply       , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_T_modReply },
5618
  {   3, &hf_h248_subtractReply  , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_T_subtractReply },
5619
  {   4, &hf_h248_auditCapReply  , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_T_auditCapReply },
5620
  {   5, &hf_h248_auditValueReply, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_h248_T_auditValueReply },
5621
  {   6, &hf_h248_notifyReply    , BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_h248_T_notifyReply },
5622
  {   7, &hf_h248_serviceChangeReply, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_h248_ServiceChangeReply },
5623
  { 0, NULL, 0, 0, 0, NULL }
5624
};
5625
5626
static unsigned
5627
0
dissect_h248_CommandReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5628
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
5629
0
                                 CommandReply_choice, hf_index, ett_h248_CommandReply,
5630
0
                                 NULL);
5631
5632
0
  return offset;
5633
0
}
5634
5635
5636
static const ber_sequence_t SEQUENCE_OF_CommandReply_sequence_of[1] = {
5637
  { &hf_h248_commandReply_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_CommandReply },
5638
};
5639
5640
static unsigned
5641
0
dissect_h248_SEQUENCE_OF_CommandReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5642
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
5643
0
                                      SEQUENCE_OF_CommandReply_sequence_of, hf_index, ett_h248_SEQUENCE_OF_CommandReply);
5644
5645
0
  return offset;
5646
0
}
5647
5648
5649
static const ber_sequence_t ActionReply_sequence[] = {
5650
  { &hf_h248_contextId      , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ContextId },
5651
  { &hf_h248_errorDescriptor, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
5652
  { &hf_h248_contextReply   , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_ContextRequest },
5653
  { &hf_h248_commandReply   , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_CommandReply },
5654
  { NULL, 0, 0, 0, NULL }
5655
};
5656
5657
static unsigned
5658
0
dissect_h248_ActionReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5659
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5660
0
                                   ActionReply_sequence, hf_index, ett_h248_ActionReply);
5661
5662
0
    if (!curr_info.cmd) {
5663
0
    curr_info.cmd = gcp_cmd(curr_info.msg,curr_info.trx,curr_info.ctx,GCP_CMD_REPLY,offset,actx->pinfo,keep_persistent_data);
5664
0
      H248_TAP();
5665
0
  }
5666
0
  return offset;
5667
0
}
5668
5669
5670
static const ber_sequence_t SEQUENCE_OF_ActionReply_sequence_of[1] = {
5671
  { &hf_h248_actionReplies_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_ActionReply },
5672
};
5673
5674
static unsigned
5675
0
dissect_h248_SEQUENCE_OF_ActionReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5676
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
5677
0
                                      SEQUENCE_OF_ActionReply_sequence_of, hf_index, ett_h248_SEQUENCE_OF_ActionReply);
5678
5679
0
  return offset;
5680
0
}
5681
5682
5683
static const value_string h248_T_transactionResult_vals[] = {
5684
  {   0, "transactionError" },
5685
  {   1, "actionReplies" },
5686
  { 0, NULL }
5687
};
5688
5689
static const ber_choice_t T_transactionResult_choice[] = {
5690
  {   0, &hf_h248_transactionError, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
5691
  {   1, &hf_h248_actionReplies  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_ActionReply },
5692
  { 0, NULL, 0, 0, 0, NULL }
5693
};
5694
5695
static unsigned
5696
0
dissect_h248_T_transactionResult(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5697
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
5698
0
                                 T_transactionResult_choice, hf_index, ett_h248_T_transactionResult,
5699
0
                                 NULL);
5700
5701
0
  return offset;
5702
0
}
5703
5704
5705
5706
static unsigned
5707
0
dissect_h248_SegmentNumber(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5708
0
  offset = dissect_ber_constrained_integer(implicit_tag, actx, tree, tvb, offset,
5709
0
                                                            0U, 65535U, hf_index, NULL);
5710
5711
0
  return offset;
5712
0
}
5713
5714
5715
static const ber_sequence_t TransactionReply_sequence[] = {
5716
  { &hf_h248_trep_transactionId, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_trep_transactionId },
5717
  { &hf_h248_immAckRequired , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
5718
  { &hf_h248_transactionResult, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_T_transactionResult },
5719
  { &hf_h248_segmentNumber  , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_SegmentNumber },
5720
  { &hf_h248_segmentationComplete, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
5721
  { NULL, 0, 0, 0, NULL }
5722
};
5723
5724
static unsigned
5725
0
dissect_h248_TransactionReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5726
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5727
0
                                   TransactionReply_sequence, hf_index, ett_h248_TransactionReply);
5728
5729
0
  return offset;
5730
0
}
5731
5732
5733
static const ber_sequence_t TransactionAck_sequence[] = {
5734
  { &hf_h248_firstAck       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TransactionId },
5735
  { &hf_h248_lastAck        , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_TransactionId },
5736
  { NULL, 0, 0, 0, NULL }
5737
};
5738
5739
static unsigned
5740
0
dissect_h248_TransactionAck(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5741
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5742
0
                                   TransactionAck_sequence, hf_index, ett_h248_TransactionAck);
5743
5744
0
  return offset;
5745
0
}
5746
5747
5748
static const ber_sequence_t TransactionResponseAck_sequence_of[1] = {
5749
  { &hf_h248_TransactionResponseAck_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_h248_TransactionAck },
5750
};
5751
5752
static unsigned
5753
0
dissect_h248_TransactionResponseAck(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5754
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
5755
0
                                      TransactionResponseAck_sequence_of, hf_index, ett_h248_TransactionResponseAck);
5756
5757
0
  return offset;
5758
0
}
5759
5760
5761
5762
static unsigned
5763
0
dissect_h248_T_seg_rep_transactionId(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5764
0
    uint32_t trx_id = 0;
5765
0
  offset = dissect_h248_trx_id(implicit_tag, actx->pinfo, tree, tvb, offset, &trx_id);
5766
0
    curr_info.trx = gcp_trx(curr_info.msg, trx_id, GCP_TRX_ACK, actx->pinfo, keep_persistent_data);
5767
0
    error_code = 0;
5768
5769
5770
0
  return offset;
5771
0
}
5772
5773
5774
static const ber_sequence_t SegmentReply_sequence[] = {
5775
  { &hf_h248_seg_rep_transactionId, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_seg_rep_transactionId },
5776
  { &hf_h248_segmentNumber  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SegmentNumber },
5777
  { &hf_h248_segmentationComplete, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_NULL },
5778
  { NULL, 0, 0, 0, NULL }
5779
};
5780
5781
static unsigned
5782
0
dissect_h248_SegmentReply(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5783
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5784
0
                                   SegmentReply_sequence, hf_index, ett_h248_SegmentReply);
5785
5786
0
  return offset;
5787
0
}
5788
5789
5790
static const value_string h248_Transaction_vals[] = {
5791
  {   0, "transactionRequest" },
5792
  {   1, "transactionPending" },
5793
  {   2, "transactionReply" },
5794
  {   3, "transactionResponseAck" },
5795
  {   4, "segmentReply" },
5796
  { 0, NULL }
5797
};
5798
5799
static const ber_choice_t Transaction_choice[] = {
5800
  {   0, &hf_h248_transactionRequest, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TransactionRequest },
5801
  {   1, &hf_h248_transactionPending, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_TransactionPending },
5802
  {   2, &hf_h248_transactionReply, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_TransactionReply },
5803
  {   3, &hf_h248_transactionResponseAck, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_h248_TransactionResponseAck },
5804
  {   4, &hf_h248_segmentReply   , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_h248_SegmentReply },
5805
  { 0, NULL, 0, 0, 0, NULL }
5806
};
5807
5808
static unsigned
5809
0
dissect_h248_Transaction(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5810
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
5811
0
                                 Transaction_choice, hf_index, ett_h248_Transaction,
5812
0
                                 NULL);
5813
5814
0
  return offset;
5815
0
}
5816
5817
5818
static const ber_sequence_t SEQUENCE_OF_Transaction_sequence_of[1] = {
5819
  { &hf_h248_transactions_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_Transaction },
5820
};
5821
5822
static unsigned
5823
0
dissect_h248_SEQUENCE_OF_Transaction(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5824
0
  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
5825
0
                                      SEQUENCE_OF_Transaction_sequence_of, hf_index, ett_h248_SEQUENCE_OF_Transaction);
5826
5827
0
  return offset;
5828
0
}
5829
5830
5831
static const value_string h248_T_messageBody_vals[] = {
5832
  {   0, "messageError" },
5833
  {   1, "transactions" },
5834
  { 0, NULL }
5835
};
5836
5837
static const ber_choice_t T_messageBody_choice[] = {
5838
  {   0, &hf_h248_messageError   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_ErrorDescriptor },
5839
  {   1, &hf_h248_transactions   , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SEQUENCE_OF_Transaction },
5840
  { 0, NULL, 0, 0, 0, NULL }
5841
};
5842
5843
static unsigned
5844
0
dissect_h248_T_messageBody(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5845
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
5846
0
                                 T_messageBody_choice, hf_index, ett_h248_T_messageBody,
5847
0
                                 NULL);
5848
5849
0
  return offset;
5850
0
}
5851
5852
5853
static const ber_sequence_t Message_sequence[] = {
5854
  { &hf_h248_version        , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_T_version },
5855
  { &hf_h248_mId            , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_MId },
5856
  { &hf_h248_messageBody    , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_h248_T_messageBody },
5857
  { NULL, 0, 0, 0, NULL }
5858
};
5859
5860
static unsigned
5861
1
dissect_h248_Message(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5862
1
    curr_info.msg = gcp_msg(actx->pinfo,tvb_raw_offset(tvb),keep_persistent_data);
5863
1
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5864
1
                                   Message_sequence, hf_index, ett_h248_Message);
5865
5866
1
    col_add_str(actx->pinfo->cinfo, COL_INFO, gcp_msg_to_str(curr_info.msg,actx->pinfo->pool,keep_persistent_data));
5867
5868
1
    if (keep_persistent_data)
5869
0
        gcp_analyze_msg(h248_tree, actx->pinfo, tvb, curr_info.msg, &h248_arrel, &ei_h248_errored_command);
5870
1
  return offset;
5871
1
}
5872
5873
5874
static const ber_sequence_t MegacoMessage_sequence[] = {
5875
  { &hf_h248_authHeader     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_h248_AuthenticationHeader },
5876
  { &hf_h248_mess           , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_Message },
5877
  { NULL, 0, 0, 0, NULL }
5878
};
5879
5880
static unsigned
5881
14
dissect_h248_MegacoMessage(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5882
14
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5883
14
                                   MegacoMessage_sequence, hf_index, ett_h248_MegacoMessage);
5884
5885
14
  return offset;
5886
14
}
5887
5888
5889
5890
static unsigned
5891
0
dissect_h248_ServiceChangeReasonStr(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5892
0
  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
5893
0
                                            actx, tree, tvb, offset, hf_index,
5894
0
                                            NULL);
5895
5896
0
  return offset;
5897
0
}
5898
5899
5900
static const value_string h248_AuditResultV1_vals[] = {
5901
  {   0, "contectAuditResult" },
5902
  {   1, "terminationAuditResult" },
5903
  { 0, NULL }
5904
};
5905
5906
static const ber_choice_t AuditResultV1_choice[] = {
5907
  {   0, &hf_h248_contectAuditResult, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
5908
  {   1, &hf_h248_terminationAuditResult, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_TerminationAudit },
5909
  { 0, NULL, 0, 0, 0, NULL }
5910
};
5911
5912
static unsigned
5913
0
dissect_h248_AuditResultV1(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5914
0
  offset = dissect_ber_choice(actx, tree, tvb, offset,
5915
0
                                 AuditResultV1_choice, hf_index, ett_h248_AuditResultV1,
5916
0
                                 NULL);
5917
5918
0
  return offset;
5919
0
}
5920
5921
5922
static const ber_sequence_t AuditReplyV1_sequence[] = {
5923
  { &hf_h248_terminationID  , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_TerminationID },
5924
  { &hf_h248_audit_result   , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_h248_AuditResultV1 },
5925
  { NULL, 0, 0, 0, NULL }
5926
};
5927
5928
static unsigned
5929
0
dissect_h248_AuditReplyV1(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5930
/* h248v1 support */
5931
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5932
0
    AuditReplyV1_sequence, hf_h248_auditValueReplyV1, ett_h248_AuditReplyV1);
5933
5934
0
  return offset;
5935
0
}
5936
5937
5938
5939
static const ber_sequence_t EventParameterV1_sequence[] = {
5940
  { &hf_h248_eventParamterName, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_EventParameterName },
5941
  { &hf_h248_event_param_value, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_EventParamValueV1 },
5942
  { NULL, 0, 0, 0, NULL }
5943
};
5944
5945
static unsigned
5946
0
dissect_h248_EventParameterV1(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5947
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5948
0
                                   EventParameterV1_sequence, hf_index, ett_h248_EventParameterV1);
5949
5950
0
  return offset;
5951
0
}
5952
5953
5954
5955
static const ber_sequence_t SigParameterV1_sequence[] = {
5956
  { &hf_h248_sigParameterName, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_h248_SigParameterName },
5957
  { &hf_h248_sig_param_value, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h248_SigParamValueV1 },
5958
  { NULL, 0, 0, 0, NULL }
5959
};
5960
5961
static unsigned
5962
0
dissect_h248_SigParameterV1(bool implicit_tag _U_, tvbuff_t *tvb _U_, unsigned offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
5963
0
  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
5964
0
                                   SigParameterV1_sequence, hf_index, ett_h248_SigParameterV1);
5965
5966
0
  return offset;
5967
0
}
5968
5969
5970
0
static int dissect_h248_tpkt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) {
5971
0
    dissect_tpkt_encap(tvb, pinfo, tree, h248_desegment, h248_handle);
5972
0
    return tvb_captured_length(tvb);
5973
0
}
5974
5975
static int
5976
dissect_h248(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
5977
15
{
5978
15
    proto_item *h248_item;
5979
15
    asn1_ctx_t asn1_ctx;
5980
15
    h248_tree = NULL;
5981
5982
15
    asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
5983
5984
15
    curr_info.msg = NULL;
5985
15
    curr_info.trx = NULL;
5986
15
    curr_info.ctx = NULL;
5987
15
    curr_info.cmd = NULL;
5988
15
    curr_info.term = NULL;
5989
15
    curr_info.pkg = NULL;
5990
15
    curr_info.evt = NULL;
5991
15
    curr_info.sig = NULL;
5992
15
    curr_info.stat = NULL;
5993
15
    curr_info.par = NULL;
5994
5995
    /* Check if it is actually a text-based H.248 encoding, which we
5996
       dissect with the "megaco" dissector in Wireshark.  (Both
5997
       encodings are MEGACO (RFC 3015) and both are H.248.)
5998
     */
5999
15
    if(tvb_captured_length(tvb)>=6){
6000
11
        unsigned toffset = tvb_skip_wsp(tvb, 0, tvb_captured_length(tvb));
6001
11
        if(!tvb_strneql(tvb, toffset, "MEGACO", 6) || !tvb_strneql(tvb, toffset, "!/2", 3)){
6002
1
            static dissector_handle_t megaco_handle=NULL;
6003
1
            if(!megaco_handle){
6004
1
                megaco_handle = find_dissector("megaco");
6005
1
            }
6006
1
            if(megaco_handle){
6007
1
                call_dissector(megaco_handle, tvb, pinfo, tree);
6008
1
                return tvb_captured_length(tvb);
6009
1
            }
6010
1
        }
6011
10
        {
6012
10
            proto_item *hidden_item = NULL;
6013
10
            uint32_t magic_num = 0, offset = 0;
6014
10
            magic_num = tvb_get_ntohl(tvb, offset);
6015
10
            hidden_item = proto_tree_add_uint(tree, hf_248_magic_num, tvb, offset, 4, magic_num);
6016
10
            proto_item_set_hidden(hidden_item);
6017
10
            if( dissector_try_uint(subdissector_table, magic_num, tvb, pinfo, tree) ) {
6018
0
                return tvb_captured_length(tvb);
6019
0
            }
6020
10
        }
6021
10
    }
6022
6023
14
    export_h248_pdu(pinfo, tvb);
6024
6025
    /* Make entry in the Protocol column on summary display */
6026
14
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "H.248");
6027
6028
14
    if (tree) {
6029
14
        h248_item = proto_tree_add_item(tree, proto_h248, tvb, 0, -1, ENC_NA);
6030
14
        h248_tree = proto_item_add_subtree(h248_item, ett_h248);
6031
14
    }
6032
6033
14
    dissect_h248_MegacoMessage(false, tvb, 0, &asn1_ctx, h248_tree, -1);
6034
6035
14
    return tvb_captured_length(tvb);
6036
15
}
6037
6038
/*--- proto_register_h248 ----------------------------------------------*/
6039
void proto_reg_handoff_h248(void);
6040
6041
14
void proto_register_h248(void) {
6042
6043
    /* List of fields */
6044
14
    static hf_register_info hf[] = {
6045
14
        { &hf_248_magic_num,
6046
14
          { "Magic Number for Avaya H.248", "h248.magic_num",
6047
14
            FT_UINT32, BASE_HEX, NULL, 0,
6048
14
            NULL, HFILL}},
6049
14
        { &hf_h248_mtpaddress_ni,
6050
14
          { "NI", "h248.mtpaddress.ni",
6051
14
            FT_UINT32, BASE_DEC, NULL, 0,
6052
14
            NULL, HFILL }},
6053
14
        { &hf_h248_mtpaddress_pc,
6054
14
          { "PC", "h248.mtpaddress.pc",
6055
14
            FT_UINT32, BASE_DEC, NULL, 0,
6056
14
            NULL, HFILL }},
6057
14
        { &hf_h248_pkg_name,
6058
14
          { "Package", "h248.package_name",
6059
14
            FT_UINT16, BASE_HEX, NULL, 0,
6060
14
            NULL, HFILL }},
6061
14
        { &hf_248_pkg_param,
6062
14
          { "Parameter ID", "h248.package_paramid",
6063
14
            FT_UINT16, BASE_HEX, NULL, 0,
6064
14
            NULL, HFILL }},
6065
14
        { &hf_h248_signal_code,
6066
14
          { "Signal ID", "h248.package_signalid",
6067
14
            FT_UINT16, BASE_HEX, NULL, 0,
6068
14
            NULL, HFILL }},
6069
14
        { &hf_h248_event_code,
6070
14
          { "Event ID", "h248.package_eventid",
6071
14
            FT_UINT16, BASE_HEX, NULL, 0,
6072
14
            NULL, HFILL }},
6073
14
        { &hf_h248_event_name,
6074
14
          { "Package and Event name", "h248.event_name",
6075
14
            FT_UINT32, BASE_HEX, NULL, 0,
6076
14
            NULL, HFILL }},
6077
14
        { &hf_h248_signal_name,
6078
14
          { "Package and Signal name", "h248.signal_name",
6079
14
            FT_UINT32, BASE_HEX, NULL, 0,
6080
14
            NULL, HFILL }},
6081
14
        { &hf_h248_pkg_bcp_BNCChar_PDU,
6082
14
          { "BNCChar", "h248.package_bcp.BNCChar",
6083
14
            FT_UINT32, BASE_DEC, VALS(gcp_term_types), 0,
6084
14
            NULL, HFILL }},
6085
14
        { &hf_h248_context_id,
6086
14
          { "contextId", "h248.contextId",
6087
14
            FT_UINT32, BASE_HEX, NULL, 0,
6088
14
            "Context ID", HFILL }},
6089
14
        { &hf_h248_term_wild_type,
6090
14
          { "Wildcard Mode", "h248.term.wildcard.mode",
6091
14
            FT_UINT8, BASE_DEC, VALS(wildcard_modes), 0x80,
6092
14
            NULL, HFILL }},
6093
14
        { &hf_h248_term_wild_level,
6094
14
          { "Wildcarding Level", "h248.term.wildcard.level",
6095
14
            FT_UINT8, BASE_DEC, VALS(wildcard_levels), 0x40,
6096
14
            NULL, HFILL }},
6097
14
        { &hf_h248_term_wild_position,
6098
14
          { "Wildcarding Position", "h248.term.wildcard.pos",
6099
14
            FT_UINT8, BASE_DEC, NULL, 0x3F,
6100
14
            NULL, HFILL }},
6101
6102
14
        { &hf_h248_no_pkg,
6103
14
          { "Unknown Package", "h248.pkg.unknown",
6104
14
            FT_BYTES, BASE_NONE, NULL, 0,
6105
14
            NULL, HFILL }},
6106
14
        { &hf_h248_no_sig,
6107
14
          { "Unknown Signal", "h248.pkg.unknown.sig",
6108
14
            FT_BYTES, BASE_NONE, NULL, 0,
6109
14
            NULL, HFILL }},
6110
14
        { &hf_h248_no_evt,
6111
14
          { "Unknown Event", "h248.pkg.unknown.evt",
6112
14
            FT_BYTES, BASE_NONE, NULL, 0,
6113
14
            NULL, HFILL }},
6114
14
        { &hf_h248_param,
6115
14
          { "Parameter", "h248.pkg.unknown.param",
6116
14
            FT_BYTES, BASE_NONE, NULL, 0,
6117
14
            NULL, HFILL }},
6118
14
        { &hf_h248_serviceChangeReasonStr,
6119
14
          { "ServiceChangeReasonStr", "h248.serviceChangeReasonstr",
6120
14
            FT_STRING, BASE_NONE, NULL, 0,
6121
14
            "h248.IA5String", HFILL }},
6122
14
        { &hf_h248_context_id64,
6123
14
          { "contextId", "h248.contextId64",
6124
14
            FT_UINT64, BASE_HEX, NULL, 0,
6125
14
            "Context ID", HFILL }},
6126
14
        { &hf_h248_transactionId64,
6127
14
          { "transactionId", "h248.transactionId",
6128
14
            FT_UINT64, BASE_DEC, NULL, 0,
6129
14
            NULL, HFILL }},
6130
6131
/* h248v1 support */
6132
14
        { &hf_h248_auditValueReplyV1,
6133
14
          { "auditValueReplyV1", "h248.auditValueReplyV1",
6134
14
            FT_NONE, BASE_NONE, NULL, 0,
6135
14
            NULL, HFILL }},
6136
6137
14
    { &hf_h248_authHeader,
6138
14
      { "authHeader", "h248.authHeader_element",
6139
14
        FT_NONE, BASE_NONE, NULL, 0,
6140
14
        "AuthenticationHeader", HFILL }},
6141
14
    { &hf_h248_mess,
6142
14
      { "mess", "h248.mess_element",
6143
14
        FT_NONE, BASE_NONE, NULL, 0,
6144
14
        "Message", HFILL }},
6145
14
    { &hf_h248_secParmIndex,
6146
14
      { "secParmIndex", "h248.secParmIndex",
6147
14
        FT_BYTES, BASE_NONE, NULL, 0,
6148
14
        "SecurityParmIndex", HFILL }},
6149
14
    { &hf_h248_seqNum,
6150
14
      { "seqNum", "h248.seqNum",
6151
14
        FT_BYTES, BASE_NONE, NULL, 0,
6152
14
        "SequenceNum", HFILL }},
6153
14
    { &hf_h248_ad,
6154
14
      { "ad", "h248.ad",
6155
14
        FT_BYTES, BASE_NONE, NULL, 0,
6156
14
        "AuthData", HFILL }},
6157
14
    { &hf_h248_version,
6158
14
      { "version", "h248.version",
6159
14
        FT_UINT32, BASE_DEC, NULL, 0,
6160
14
        NULL, HFILL }},
6161
14
    { &hf_h248_mId,
6162
14
      { "mId", "h248.mId",
6163
14
        FT_UINT32, BASE_DEC, VALS(h248_MId_vals), 0,
6164
14
        NULL, HFILL }},
6165
14
    { &hf_h248_messageBody,
6166
14
      { "messageBody", "h248.messageBody",
6167
14
        FT_UINT32, BASE_DEC, VALS(h248_T_messageBody_vals), 0,
6168
14
        NULL, HFILL }},
6169
14
    { &hf_h248_messageError,
6170
14
      { "messageError", "h248.messageError_element",
6171
14
        FT_NONE, BASE_NONE, NULL, 0,
6172
14
        "ErrorDescriptor", HFILL }},
6173
14
    { &hf_h248_transactions,
6174
14
      { "transactions", "h248.transactions",
6175
14
        FT_UINT32, BASE_DEC, NULL, 0,
6176
14
        "SEQUENCE_OF_Transaction", HFILL }},
6177
14
    { &hf_h248_transactions_item,
6178
14
      { "Transaction", "h248.Transaction",
6179
14
        FT_UINT32, BASE_DEC, VALS(h248_Transaction_vals), 0,
6180
14
        NULL, HFILL }},
6181
14
    { &hf_h248_ip4Address,
6182
14
      { "ip4Address", "h248.ip4Address_element",
6183
14
        FT_NONE, BASE_NONE, NULL, 0,
6184
14
        NULL, HFILL }},
6185
14
    { &hf_h248_ip6Address,
6186
14
      { "ip6Address", "h248.ip6Address_element",
6187
14
        FT_NONE, BASE_NONE, NULL, 0,
6188
14
        NULL, HFILL }},
6189
14
    { &hf_h248_domainName,
6190
14
      { "domainName", "h248.domainName_element",
6191
14
        FT_NONE, BASE_NONE, NULL, 0,
6192
14
        NULL, HFILL }},
6193
14
    { &hf_h248_deviceName,
6194
14
      { "deviceName", "h248.deviceName",
6195
14
        FT_STRING, BASE_NONE, NULL, 0,
6196
14
        "PathName", HFILL }},
6197
14
    { &hf_h248_mtpAddress,
6198
14
      { "mtpAddress", "h248.mtpAddress",
6199
14
        FT_BYTES, BASE_NONE, NULL, 0,
6200
14
        NULL, HFILL }},
6201
14
    { &hf_h248_domName,
6202
14
      { "name", "h248.domainname",
6203
14
        FT_STRING, BASE_NONE, NULL, 0,
6204
14
        "IA5String", HFILL }},
6205
14
    { &hf_h248_portNumber,
6206
14
      { "portNumber", "h248.portNumber",
6207
14
        FT_UINT32, BASE_DEC, NULL, 0,
6208
14
        "INTEGER_0_65535", HFILL }},
6209
14
    { &hf_h248_iP4Address,
6210
14
      { "address", "h248.iP4Address",
6211
14
        FT_IPv4, BASE_NONE, NULL, 0,
6212
14
        "OCTET_STRING_SIZE_4", HFILL }},
6213
14
    { &hf_h248_iP6Address,
6214
14
      { "address", "h248.iP6Address",
6215
14
        FT_IPv6, BASE_NONE, NULL, 0,
6216
14
        "OCTET_STRING_SIZE_16", HFILL }},
6217
14
    { &hf_h248_transactionRequest,
6218
14
      { "transactionRequest", "h248.transactionRequest_element",
6219
14
        FT_NONE, BASE_NONE, NULL, 0,
6220
14
        NULL, HFILL }},
6221
14
    { &hf_h248_transactionPending,
6222
14
      { "transactionPending", "h248.transactionPending_element",
6223
14
        FT_NONE, BASE_NONE, NULL, 0,
6224
14
        NULL, HFILL }},
6225
14
    { &hf_h248_transactionReply,
6226
14
      { "transactionReply", "h248.transactionReply_element",
6227
14
        FT_NONE, BASE_NONE, NULL, 0,
6228
14
        NULL, HFILL }},
6229
14
    { &hf_h248_transactionResponseAck,
6230
14
      { "transactionResponseAck", "h248.transactionResponseAck",
6231
14
        FT_UINT32, BASE_DEC, NULL, 0,
6232
14
        NULL, HFILL }},
6233
14
    { &hf_h248_segmentReply,
6234
14
      { "segmentReply", "h248.segmentReply_element",
6235
14
        FT_NONE, BASE_NONE, NULL, 0,
6236
14
        NULL, HFILL }},
6237
14
    { &hf_h248_transactionId,
6238
14
      { "transactionId", "h248.transactionRequest.transactionId",
6239
14
        FT_UINT32, BASE_DEC, NULL, 0,
6240
14
        NULL, HFILL }},
6241
14
    { &hf_h248_actions,
6242
14
      { "actions", "h248.actions",
6243
14
        FT_UINT32, BASE_DEC, NULL, 0,
6244
14
        "SEQUENCE_OF_ActionRequest", HFILL }},
6245
14
    { &hf_h248_actions_item,
6246
14
      { "ActionRequest", "h248.ActionRequest_element",
6247
14
        FT_NONE, BASE_NONE, NULL, 0,
6248
14
        NULL, HFILL }},
6249
14
    { &hf_h248_tpend_transactionId,
6250
14
      { "transactionId", "h248.transactionpending.transactionId",
6251
14
        FT_UINT32, BASE_DEC, NULL, 0,
6252
14
        "T_tpend_transactionId", HFILL }},
6253
14
    { &hf_h248_trep_transactionId,
6254
14
      { "transactionId", "h248.transactionreply.transactionId",
6255
14
        FT_UINT32, BASE_DEC, NULL, 0,
6256
14
        "T_trep_transactionId", HFILL }},
6257
14
    { &hf_h248_immAckRequired,
6258
14
      { "immAckRequired", "h248.immAckRequired_element",
6259
14
        FT_NONE, BASE_NONE, NULL, 0,
6260
14
        NULL, HFILL }},
6261
14
    { &hf_h248_transactionResult,
6262
14
      { "transactionResult", "h248.transactionResult",
6263
14
        FT_UINT32, BASE_DEC, VALS(h248_T_transactionResult_vals), 0,
6264
14
        NULL, HFILL }},
6265
14
    { &hf_h248_transactionError,
6266
14
      { "transactionError", "h248.transactionError_element",
6267
14
        FT_NONE, BASE_NONE, NULL, 0,
6268
14
        "ErrorDescriptor", HFILL }},
6269
14
    { &hf_h248_actionReplies,
6270
14
      { "actionReplies", "h248.actionReplies",
6271
14
        FT_UINT32, BASE_DEC, NULL, 0,
6272
14
        "SEQUENCE_OF_ActionReply", HFILL }},
6273
14
    { &hf_h248_actionReplies_item,
6274
14
      { "ActionReply", "h248.ActionReply_element",
6275
14
        FT_NONE, BASE_NONE, NULL, 0,
6276
14
        NULL, HFILL }},
6277
14
    { &hf_h248_segmentNumber,
6278
14
      { "segmentNumber", "h248.segmentNumber",
6279
14
        FT_UINT32, BASE_DEC, NULL, 0,
6280
14
        NULL, HFILL }},
6281
14
    { &hf_h248_segmentationComplete,
6282
14
      { "segmentationComplete", "h248.segmentationComplete_element",
6283
14
        FT_NONE, BASE_NONE, NULL, 0,
6284
14
        NULL, HFILL }},
6285
14
    { &hf_h248_seg_rep_transactionId,
6286
14
      { "transactionId", "h248.segmentreply.transactionId",
6287
14
        FT_UINT32, BASE_DEC, NULL, 0,
6288
14
        "T_seg_rep_transactionId", HFILL }},
6289
14
    { &hf_h248_TransactionResponseAck_item,
6290
14
      { "TransactionAck", "h248.TransactionAck_element",
6291
14
        FT_NONE, BASE_NONE, NULL, 0,
6292
14
        NULL, HFILL }},
6293
14
    { &hf_h248_firstAck,
6294
14
      { "firstAck", "h248.firstAck",
6295
14
        FT_UINT32, BASE_DEC, NULL, 0,
6296
14
        "TransactionId", HFILL }},
6297
14
    { &hf_h248_lastAck,
6298
14
      { "lastAck", "h248.lastAck",
6299
14
        FT_UINT32, BASE_DEC, NULL, 0,
6300
14
        "TransactionId", HFILL }},
6301
14
    { &hf_h248_errorCode,
6302
14
      { "errorCode", "h248.errorCode",
6303
14
        FT_UINT32, BASE_DEC|BASE_EXT_STRING, &h248_reasons_ext, 0,
6304
14
        NULL, HFILL }},
6305
14
    { &hf_h248_errorText,
6306
14
      { "errorText", "h248.errorText",
6307
14
        FT_STRING, BASE_NONE, NULL, 0,
6308
14
        NULL, HFILL }},
6309
14
    { &hf_h248_contextId,
6310
14
      { "contextId", "h248.contextId",
6311
14
        FT_UINT32, BASE_HEX, NULL, 0,
6312
14
        NULL, HFILL }},
6313
14
    { &hf_h248_contextRequest,
6314
14
      { "contextRequest", "h248.contextRequest_element",
6315
14
        FT_NONE, BASE_NONE, NULL, 0,
6316
14
        NULL, HFILL }},
6317
14
    { &hf_h248_contextAttrAuditReq,
6318
14
      { "contextAttrAuditReq", "h248.contextAttrAuditReq_element",
6319
14
        FT_NONE, BASE_NONE, NULL, 0,
6320
14
        NULL, HFILL }},
6321
14
    { &hf_h248_commandRequests,
6322
14
      { "commandRequests", "h248.commandRequests",
6323
14
        FT_UINT32, BASE_DEC, NULL, 0,
6324
14
        "SEQUENCE_OF_CommandRequest", HFILL }},
6325
14
    { &hf_h248_commandRequests_item,
6326
14
      { "CommandRequest", "h248.CommandRequest_element",
6327
14
        FT_NONE, BASE_NONE, NULL, 0,
6328
14
        NULL, HFILL }},
6329
14
    { &hf_h248_errorDescriptor,
6330
14
      { "errorDescriptor", "h248.errorDescriptor_element",
6331
14
        FT_NONE, BASE_NONE, NULL, 0,
6332
14
        NULL, HFILL }},
6333
14
    { &hf_h248_contextReply,
6334
14
      { "contextReply", "h248.contextReply_element",
6335
14
        FT_NONE, BASE_NONE, NULL, 0,
6336
14
        "ContextRequest", HFILL }},
6337
14
    { &hf_h248_commandReply,
6338
14
      { "commandReply", "h248.commandReply",
6339
14
        FT_UINT32, BASE_DEC, NULL, 0,
6340
14
        "SEQUENCE_OF_CommandReply", HFILL }},
6341
14
    { &hf_h248_commandReply_item,
6342
14
      { "CommandReply", "h248.CommandReply",
6343
14
        FT_UINT32, BASE_DEC, VALS(h248_CommandReply_vals), 0,
6344
14
        NULL, HFILL }},
6345
14
    { &hf_h248_priority,
6346
14
      { "priority", "h248.priority",
6347
14
        FT_UINT32, BASE_DEC, NULL, 0,
6348
14
        "INTEGER_0_15", HFILL }},
6349
14
    { &hf_h248_emergency,
6350
14
      { "emergency", "h248.emergency",
6351
14
        FT_BOOLEAN, BASE_NONE, NULL, 0,
6352
14
        "BOOLEAN", HFILL }},
6353
14
    { &hf_h248_topologyReq,
6354
14
      { "topologyReq", "h248.topologyReq",
6355
14
        FT_UINT32, BASE_DEC, NULL, 0,
6356
14
        NULL, HFILL }},
6357
14
    { &hf_h248_topologyReq_item,
6358
14
      { "TopologyRequest", "h248.TopologyRequest_element",
6359
14
        FT_NONE, BASE_NONE, NULL, 0,
6360
14
        NULL, HFILL }},
6361
14
    { &hf_h248_iepscallind_BOOL,
6362
14
      { "iepscallind", "h248.iepscallind_BOOL",
6363
14
        FT_BOOLEAN, BASE_NONE, NULL, 0,
6364
14
        "Iepscallind_BOOL", HFILL }},
6365
14
    { &hf_h248_contextProp,
6366
14
      { "contextProp", "h248.contextProp",
6367
14
        FT_UINT32, BASE_DEC, NULL, 0,
6368
14
        "SEQUENCE_OF_PropertyParm", HFILL }},
6369
14
    { &hf_h248_contextProp_item,
6370
14
      { "PropertyParm", "h248.PropertyParm_element",
6371
14
        FT_NONE, BASE_NONE, NULL, 0,
6372
14
        NULL, HFILL }},
6373
14
    { &hf_h248_contextList,
6374
14
      { "contextList", "h248.contextList",
6375
14
        FT_UINT32, BASE_DEC, NULL, 0,
6376
14
        "SEQUENCE_OF_ContextIDinList", HFILL }},
6377
14
    { &hf_h248_contextList_item,
6378
14
      { "ContextIDinList", "h248.ContextIDinList",
6379
14
        FT_UINT32, BASE_DEC, NULL, 0,
6380
14
        NULL, HFILL }},
6381
14
    { &hf_h248_topology,
6382
14
      { "topology", "h248.topology_element",
6383
14
        FT_NONE, BASE_NONE, NULL, 0,
6384
14
        NULL, HFILL }},
6385
14
    { &hf_h248_cAAREmergency,
6386
14
      { "emergency", "h248.cAAREmergency_element",
6387
14
        FT_NONE, BASE_NONE, NULL, 0,
6388
14
        NULL, HFILL }},
6389
14
    { &hf_h248_cAARPriority,
6390
14
      { "priority", "h248.cAARPriority_element",
6391
14
        FT_NONE, BASE_NONE, NULL, 0,
6392
14
        NULL, HFILL }},
6393
14
    { &hf_h248_iepscallind,
6394
14
      { "iepscallind", "h248.iepscallind_element",
6395
14
        FT_NONE, BASE_NONE, NULL, 0,
6396
14
        NULL, HFILL }},
6397
14
    { &hf_h248_contextPropAud,
6398
14
      { "contextPropAud", "h248.contextPropAud",
6399
14
        FT_UINT32, BASE_DEC, NULL, 0,
6400
14
        "SEQUENCE_OF_IndAudPropertyParm", HFILL }},
6401
14
    { &hf_h248_contextPropAud_item,
6402
14
      { "IndAudPropertyParm", "h248.IndAudPropertyParm_element",
6403
14
        FT_NONE, BASE_NONE, NULL, 0,
6404
14
        NULL, HFILL }},
6405
14
    { &hf_h248_selectpriority,
6406
14
      { "selectpriority", "h248.selectpriority",
6407
14
        FT_UINT32, BASE_DEC, NULL, 0,
6408
14
        "INTEGER_0_15", HFILL }},
6409
14
    { &hf_h248_selectemergency,
6410
14
      { "selectemergency", "h248.selectemergency",
6411
14
        FT_BOOLEAN, BASE_NONE, NULL, 0,
6412
14
        "BOOLEAN", HFILL }},
6413
14
    { &hf_h248_selectiepscallind,
6414
14
      { "selectiepscallind", "h248.selectiepscallind",
6415
14
        FT_BOOLEAN, BASE_NONE, NULL, 0,
6416
14
        "BOOLEAN", HFILL }},
6417
14
    { &hf_h248_selectLogic,
6418
14
      { "selectLogic", "h248.selectLogic",
6419
14
        FT_UINT32, BASE_DEC, VALS(h248_SelectLogic_vals), 0,
6420
14
        NULL, HFILL }},
6421
14
    { &hf_h248_andAUDITSelect,
6422
14
      { "andAUDITSelect", "h248.andAUDITSelect_element",
6423
14
        FT_NONE, BASE_NONE, NULL, 0,
6424
14
        NULL, HFILL }},
6425
14
    { &hf_h248_orAUDITSelect,
6426
14
      { "orAUDITSelect", "h248.orAUDITSelect_element",
6427
14
        FT_NONE, BASE_NONE, NULL, 0,
6428
14
        NULL, HFILL }},
6429
14
    { &hf_h248_command,
6430
14
      { "command", "h248.command",
6431
14
        FT_UINT32, BASE_DEC, VALS(h248_Command_vals), 0,
6432
14
        NULL, HFILL }},
6433
14
    { &hf_h248_optional,
6434
14
      { "optional", "h248.optional_element",
6435
14
        FT_NONE, BASE_NONE, NULL, 0,
6436
14
        NULL, HFILL }},
6437
14
    { &hf_h248_wildcardReturn,
6438
14
      { "wildcardReturn", "h248.wildcardReturn_element",
6439
14
        FT_NONE, BASE_NONE, NULL, 0,
6440
14
        NULL, HFILL }},
6441
14
    { &hf_h248_addReq,
6442
14
      { "addReq", "h248.addReq_element",
6443
14
        FT_NONE, BASE_NONE, NULL, 0,
6444
14
        NULL, HFILL }},
6445
14
    { &hf_h248_moveReq,
6446
14
      { "moveReq", "h248.moveReq_element",
6447
14
        FT_NONE, BASE_NONE, NULL, 0,
6448
14
        NULL, HFILL }},
6449
14
    { &hf_h248_modReq,
6450
14
      { "modReq", "h248.modReq_element",
6451
14
        FT_NONE, BASE_NONE, NULL, 0,
6452
14
        NULL, HFILL }},
6453
14
    { &hf_h248_subtractReq,
6454
14
      { "subtractReq", "h248.subtractReq_element",
6455
14
        FT_NONE, BASE_NONE, NULL, 0,
6456
14
        NULL, HFILL }},
6457
14
    { &hf_h248_auditCapRequest,
6458
14
      { "auditCapRequest", "h248.auditCapRequest_element",
6459
14
        FT_NONE, BASE_NONE, NULL, 0,
6460
14
        NULL, HFILL }},
6461
14
    { &hf_h248_auditValueRequest,
6462
14
      { "auditValueRequest", "h248.auditValueRequest_element",
6463
14
        FT_NONE, BASE_NONE, NULL, 0,
6464
14
        NULL, HFILL }},
6465
14
    { &hf_h248_notifyReq,
6466
14
      { "notifyReq", "h248.notifyReq_element",
6467
14
        FT_NONE, BASE_NONE, NULL, 0,
6468
14
        NULL, HFILL }},
6469
14
    { &hf_h248_serviceChangeReq,
6470
14
      { "serviceChangeReq", "h248.serviceChangeReq_element",
6471
14
        FT_NONE, BASE_NONE, NULL, 0,
6472
14
        "ServiceChangeRequest", HFILL }},
6473
14
    { &hf_h248_addReply,
6474
14
      { "addReply", "h248.addReply_element",
6475
14
        FT_NONE, BASE_NONE, NULL, 0,
6476
14
        NULL, HFILL }},
6477
14
    { &hf_h248_moveReply,
6478
14
      { "moveReply", "h248.moveReply_element",
6479
14
        FT_NONE, BASE_NONE, NULL, 0,
6480
14
        NULL, HFILL }},
6481
14
    { &hf_h248_modReply,
6482
14
      { "modReply", "h248.modReply_element",
6483
14
        FT_NONE, BASE_NONE, NULL, 0,
6484
14
        NULL, HFILL }},
6485
14
    { &hf_h248_subtractReply,
6486
14
      { "subtractReply", "h248.subtractReply_element",
6487
14
        FT_NONE, BASE_NONE, NULL, 0,
6488
14
        NULL, HFILL }},
6489
14
    { &hf_h248_auditCapReply,
6490
14
      { "auditCapReply", "h248.auditCapReply",
6491
14
        FT_UINT32, BASE_DEC, VALS(h248_AuditReply_vals), 0,
6492
14
        NULL, HFILL }},
6493
14
    { &hf_h248_auditValueReply,
6494
14
      { "auditValueReply", "h248.auditValueReply",
6495
14
        FT_UINT32, BASE_DEC, VALS(h248_AuditReply_vals), 0,
6496
14
        NULL, HFILL }},
6497
14
    { &hf_h248_notifyReply,
6498
14
      { "notifyReply", "h248.notifyReply_element",
6499
14
        FT_NONE, BASE_NONE, NULL, 0,
6500
14
        NULL, HFILL }},
6501
14
    { &hf_h248_serviceChangeReply,
6502
14
      { "serviceChangeReply", "h248.serviceChangeReply_element",
6503
14
        FT_NONE, BASE_NONE, NULL, 0,
6504
14
        NULL, HFILL }},
6505
14
    { &hf_h248_terminationFrom,
6506
14
      { "terminationFrom", "h248.terminationFrom_element",
6507
14
        FT_NONE, BASE_NONE, NULL, 0,
6508
14
        "TerminationID", HFILL }},
6509
14
    { &hf_h248_terminationTo,
6510
14
      { "terminationTo", "h248.terminationTo_element",
6511
14
        FT_NONE, BASE_NONE, NULL, 0,
6512
14
        "TerminationID", HFILL }},
6513
14
    { &hf_h248_topologyDirection,
6514
14
      { "topologyDirection", "h248.topologyDirection",
6515
14
        FT_UINT32, BASE_DEC, VALS(h248_T_topologyDirection_vals), 0,
6516
14
        NULL, HFILL }},
6517
14
    { &hf_h248_streamID,
6518
14
      { "streamID", "h248.streamID",
6519
14
        FT_UINT32, BASE_DEC, NULL, 0,
6520
14
        NULL, HFILL }},
6521
14
    { &hf_h248_topologyDirectionExtension,
6522
14
      { "topologyDirectionExtension", "h248.topologyDirectionExtension",
6523
14
        FT_UINT32, BASE_DEC, VALS(h248_T_topologyDirectionExtension_vals), 0,
6524
14
        NULL, HFILL }},
6525
14
    { &hf_h248_terminationIDList,
6526
14
      { "terminationID", "h248.terminationIDList",
6527
14
        FT_UINT32, BASE_DEC, NULL, 0,
6528
14
        "TerminationIDList", HFILL }},
6529
14
    { &hf_h248_descriptors,
6530
14
      { "descriptors", "h248.descriptors",
6531
14
        FT_UINT32, BASE_DEC, NULL, 0,
6532
14
        "SEQUENCE_OF_AmmDescriptor", HFILL }},
6533
14
    { &hf_h248_descriptors_item,
6534
14
      { "AmmDescriptor", "h248.AmmDescriptor",
6535
14
        FT_UINT32, BASE_DEC, VALS(h248_AmmDescriptor_vals), 0,
6536
14
        NULL, HFILL }},
6537
14
    { &hf_h248_mediaDescriptor,
6538
14
      { "mediaDescriptor", "h248.mediaDescriptor_element",
6539
14
        FT_NONE, BASE_NONE, NULL, 0,
6540
14
        NULL, HFILL }},
6541
14
    { &hf_h248_modemDescriptor,
6542
14
      { "modemDescriptor", "h248.modemDescriptor_element",
6543
14
        FT_NONE, BASE_NONE, NULL, 0,
6544
14
        NULL, HFILL }},
6545
14
    { &hf_h248_muxDescriptor,
6546
14
      { "muxDescriptor", "h248.muxDescriptor_element",
6547
14
        FT_NONE, BASE_NONE, NULL, 0,
6548
14
        NULL, HFILL }},
6549
14
    { &hf_h248_eventsDescriptor,
6550
14
      { "eventsDescriptor", "h248.eventsDescriptor_element",
6551
14
        FT_NONE, BASE_NONE, NULL, 0,
6552
14
        NULL, HFILL }},
6553
14
    { &hf_h248_eventBufferDescriptor,
6554
14
      { "eventBufferDescriptor", "h248.eventBufferDescriptor",
6555
14
        FT_UINT32, BASE_DEC, NULL, 0,
6556
14
        NULL, HFILL }},
6557
14
    { &hf_h248_signalsDescriptor,
6558
14
      { "signalsDescriptor", "h248.signalsDescriptor",
6559
14
        FT_UINT32, BASE_DEC, NULL, 0,
6560
14
        NULL, HFILL }},
6561
14
    { &hf_h248_digitMapDescriptor,
6562
14
      { "digitMapDescriptor", "h248.digitMapDescriptor_element",
6563
14
        FT_NONE, BASE_NONE, NULL, 0,
6564
14
        NULL, HFILL }},
6565
14
    { &hf_h248_auditDescriptor,
6566
14
      { "auditDescriptor", "h248.auditDescriptor_element",
6567
14
        FT_NONE, BASE_NONE, NULL, 0,
6568
14
        NULL, HFILL }},
6569
14
    { &hf_h248_aDstatisticsDescriptor,
6570
14
      { "statisticsDescriptor", "h248.aDstatisticsDescriptor",
6571
14
        FT_UINT32, BASE_DEC, NULL, 0,
6572
14
        NULL, HFILL }},
6573
14
    { &hf_h248_terminationAudit,
6574
14
      { "terminationAudit", "h248.terminationAudit",
6575
14
        FT_UINT32, BASE_DEC, NULL, 0,
6576
14
        NULL, HFILL }},
6577
14
    { &hf_h248_terminationID,
6578
14
      { "terminationID", "h248.terminationID_element",
6579
14
        FT_NONE, BASE_NONE, NULL, 0,
6580
14
        NULL, HFILL }},
6581
14
    { &hf_h248_contextAuditResult,
6582
14
      { "contextAuditResult", "h248.contextAuditResult",
6583
14
        FT_UINT32, BASE_DEC, NULL, 0,
6584
14
        "TerminationIDList", HFILL }},
6585
14
    { &hf_h248_error,
6586
14
      { "error", "h248.error_element",
6587
14
        FT_NONE, BASE_NONE, NULL, 0,
6588
14
        "ErrorDescriptor", HFILL }},
6589
14
    { &hf_h248_auditResult,
6590
14
      { "auditResult", "h248.auditResult_element",
6591
14
        FT_NONE, BASE_NONE, NULL, 0,
6592
14
        NULL, HFILL }},
6593
14
    { &hf_h248_auditResultTermList,
6594
14
      { "auditResultTermList", "h248.auditResultTermList_element",
6595
14
        FT_NONE, BASE_NONE, NULL, 0,
6596
14
        "TermListAuditResult", HFILL }},
6597
14
    { &hf_h248_terminationAuditResult,
6598
14
      { "terminationAuditResult", "h248.terminationAuditResult",
6599
14
        FT_UINT32, BASE_DEC, NULL, 0,
6600
14
        "TerminationAudit", HFILL }},
6601
14
    { &hf_h248_TerminationAudit_item,
6602
14
      { "AuditReturnParameter", "h248.AuditReturnParameter",
6603
14
        FT_UINT32, BASE_DEC, VALS(h248_AuditReturnParameter_vals), 0,
6604
14
        NULL, HFILL }},
6605
14
    { &hf_h248_observedEventsDescriptor,
6606
14
      { "observedEventsDescriptor", "h248.observedEventsDescriptor_element",
6607
14
        FT_NONE, BASE_NONE, NULL, 0,
6608
14
        NULL, HFILL }},
6609
14
    { &hf_h248_aRPstatisticsDescriptor,
6610
14
      { "statisticsDescriptor", "h248.aRPstatisticsDescriptor",
6611
14
        FT_UINT32, BASE_DEC, NULL, 0,
6612
14
        NULL, HFILL }},
6613
14
    { &hf_h248_packagesDescriptor,
6614
14
      { "packagesDescriptor", "h248.packagesDescriptor",
6615
14
        FT_UINT32, BASE_DEC, NULL, 0,
6616
14
        NULL, HFILL }},
6617
14
    { &hf_h248_emptyDescriptors,
6618
14
      { "emptyDescriptors", "h248.emptyDescriptors_element",
6619
14
        FT_NONE, BASE_NONE, NULL, 0,
6620
14
        "AuditDescriptor", HFILL }},
6621
14
    { &hf_h248_auditToken,
6622
14
      { "auditToken", "h248.auditToken",
6623
14
        FT_BYTES, BASE_NONE, NULL, 0,
6624
14
        NULL, HFILL }},
6625
14
    { &hf_h248_auditPropertyToken,
6626
14
      { "auditPropertyToken", "h248.auditPropertyToken",
6627
14
        FT_UINT32, BASE_DEC, NULL, 0,
6628
14
        "SEQUENCE_OF_IndAuditParameter", HFILL }},
6629
14
    { &hf_h248_auditPropertyToken_item,
6630
14
      { "IndAuditParameter", "h248.IndAuditParameter",
6631
14
        FT_UINT32, BASE_DEC, VALS(h248_IndAuditParameter_vals), 0,
6632
14
        NULL, HFILL }},
6633
14
    { &hf_h248_indaudmediaDescriptor,
6634
14
      { "indaudmediaDescriptor", "h248.indaudmediaDescriptor_element",
6635
14
        FT_NONE, BASE_NONE, NULL, 0,
6636
14
        NULL, HFILL }},
6637
14
    { &hf_h248_indaudeventsDescriptor,
6638
14
      { "indaudeventsDescriptor", "h248.indaudeventsDescriptor_element",
6639
14
        FT_NONE, BASE_NONE, NULL, 0,
6640
14
        NULL, HFILL }},
6641
14
    { &hf_h248_indaudeventBufferDescriptor,
6642
14
      { "indaudeventBufferDescriptor", "h248.indaudeventBufferDescriptor_element",
6643
14
        FT_NONE, BASE_NONE, NULL, 0,
6644
14
        NULL, HFILL }},
6645
14
    { &hf_h248_indaudsignalsDescriptor,
6646
14
      { "indaudsignalsDescriptor", "h248.indaudsignalsDescriptor",
6647
14
        FT_UINT32, BASE_DEC, VALS(h248_IndAudSignalsDescriptor_vals), 0,
6648
14
        NULL, HFILL }},
6649
14
    { &hf_h248_indauddigitMapDescriptor,
6650
14
      { "indauddigitMapDescriptor", "h248.indauddigitMapDescriptor_element",
6651
14
        FT_NONE, BASE_NONE, NULL, 0,
6652
14
        NULL, HFILL }},
6653
14
    { &hf_h248_indaudstatisticsDescriptor,
6654
14
      { "indaudstatisticsDescriptor", "h248.indaudstatisticsDescriptor_element",
6655
14
        FT_NONE, BASE_NONE, NULL, 0,
6656
14
        NULL, HFILL }},
6657
14
    { &hf_h248_indaudpackagesDescriptor,
6658
14
      { "indaudpackagesDescriptor", "h248.indaudpackagesDescriptor_element",
6659
14
        FT_NONE, BASE_NONE, NULL, 0,
6660
14
        NULL, HFILL }},
6661
14
    { &hf_h248_indAudTerminationStateDescriptor,
6662
14
      { "termStateDescr", "h248.indAudTerminationStateDescriptor_element",
6663
14
        FT_NONE, BASE_NONE, NULL, 0,
6664
14
        "IndAudTerminationStateDescriptor", HFILL }},
6665
14
    { &hf_h248_indAudMediaDescriptorStreams,
6666
14
      { "streams", "h248.indAudMediaDescriptorStreams",
6667
14
        FT_UINT32, BASE_DEC, VALS(h248_IndAudMediaDescriptorStreams_vals), 0,
6668
14
        "IndAudMediaDescriptorStreams", HFILL }},
6669
14
    { &hf_h248_oneStream,
6670
14
      { "oneStream", "h248.oneStream_element",
6671
14
        FT_NONE, BASE_NONE, NULL, 0,
6672
14
        "IndAudStreamParms", HFILL }},
6673
14
    { &hf_h248_multiStream,
6674
14
      { "multiStream", "h248.multiStream",
6675
14
        FT_UINT32, BASE_DEC, NULL, 0,
6676
14
        "SEQUENCE_OF_IndAudStreamDescriptor", HFILL }},
6677
14
    { &hf_h248_multiStream_item,
6678
14
      { "IndAudStreamDescriptor", "h248.IndAudStreamDescriptor_element",
6679
14
        FT_NONE, BASE_NONE, NULL, 0,
6680
14
        NULL, HFILL }},
6681
14
    { &hf_h248_indAudStreamParms,
6682
14
      { "streamParms", "h248.indAudStreamParms_element",
6683
14
        FT_NONE, BASE_NONE, NULL, 0,
6684
14
        "IndAudStreamParms", HFILL }},
6685
14
    { &hf_h248_iASPLocalControlDescriptor,
6686
14
      { "localControlDescriptor", "h248.iASPLocalControlDescriptor_element",
6687
14
        FT_NONE, BASE_NONE, NULL, 0,
6688
14
        "IndAudLocalControlDescriptor", HFILL }},
6689
14
    { &hf_h248_iASPLocalDescriptor,
6690
14
      { "localDescriptor", "h248.iASPLocalDescriptor_element",
6691
14
        FT_NONE, BASE_NONE, NULL, 0,
6692
14
        "IndAudLocalRemoteDescriptor", HFILL }},
6693
14
    { &hf_h248_iASPRemoteDescriptor,
6694
14
      { "remoteDescriptor", "h248.iASPRemoteDescriptor_element",
6695
14
        FT_NONE, BASE_NONE, NULL, 0,
6696
14
        "IndAudLocalRemoteDescriptor", HFILL }},
6697
14
    { &hf_h248_statisticsDescriptor,
6698
14
      { "statisticsDescriptor", "h248.statisticsDescriptor_element",
6699
14
        FT_NONE, BASE_NONE, NULL, 0,
6700
14
        "IndAudStatisticsDescriptor", HFILL }},
6701
14
    { &hf_h248_iALCDStreamMode,
6702
14
      { "streamMode", "h248.iALCDStreamMode_element",
6703
14
        FT_NONE, BASE_NONE, NULL, 0,
6704
14
        NULL, HFILL }},
6705
14
    { &hf_h248_iALCDReserveValue,
6706
14
      { "reserveValue", "h248.iALCDReserveValue_element",
6707
14
        FT_NONE, BASE_NONE, NULL, 0,
6708
14
        NULL, HFILL }},
6709
14
    { &hf_h248_iALCDReserveGroup,
6710
14
      { "reserveGroup", "h248.iALCDReserveGroup_element",
6711
14
        FT_NONE, BASE_NONE, NULL, 0,
6712
14
        NULL, HFILL }},
6713
14
    { &hf_h248_indAudPropertyParms,
6714
14
      { "propertyParms", "h248.indAudPropertyParms",
6715
14
        FT_UINT32, BASE_DEC, NULL, 0,
6716
14
        "SEQUENCE_OF_IndAudPropertyParm", HFILL }},
6717
14
    { &hf_h248_indAudPropertyParms_item,
6718
14
      { "IndAudPropertyParm", "h248.IndAudPropertyParm_element",
6719
14
        FT_NONE, BASE_NONE, NULL, 0,
6720
14
        NULL, HFILL }},
6721
14
    { &hf_h248_streamModeSel,
6722
14
      { "streamModeSel", "h248.streamModeSel",
6723
14
        FT_UINT32, BASE_DEC, VALS(h248_StreamMode_vals), 0,
6724
14
        "StreamMode", HFILL }},
6725
14
    { &hf_h248_name,
6726
14
      { "name", "h248.name",
6727
14
        FT_BYTES, BASE_NONE, NULL, 0,
6728
14
        "PkgdName", HFILL }},
6729
14
    { &hf_h248_propertyParms,
6730
14
      { "propertyParms", "h248.propertyParms_element",
6731
14
        FT_NONE, BASE_NONE, NULL, 0,
6732
14
        "PropertyParm", HFILL }},
6733
14
    { &hf_h248_propGroupID,
6734
14
      { "propGroupID", "h248.propGroupID",
6735
14
        FT_UINT32, BASE_DEC, NULL, 0,
6736
14
        "INTEGER_0_65535", HFILL }},
6737
14
    { &hf_h248_iAPropertyGroup,
6738
14
      { "propGrps", "h248.iAPropertyGroup",
6739
14
        FT_UINT32, BASE_DEC, NULL, 0,
6740
14
        "IndAudPropertyGroup", HFILL }},
6741
14
    { &hf_h248_IndAudPropertyGroup_item,
6742
14
      { "IndAudPropertyParm", "h248.IndAudPropertyParm_element",
6743
14
        FT_NONE, BASE_NONE, NULL, 0,
6744
14
        NULL, HFILL }},
6745
14
    { &hf_h248_eventBufferControl,
6746
14
      { "eventBufferControl", "h248.eventBufferControl_element",
6747
14
        FT_NONE, BASE_NONE, NULL, 0,
6748
14
        NULL, HFILL }},
6749
14
    { &hf_h248_iATSDServiceState,
6750
14
      { "serviceState", "h248.iATSDServiceState_element",
6751
14
        FT_NONE, BASE_NONE, NULL, 0,
6752
14
        NULL, HFILL }},
6753
14
    { &hf_h248_serviceStateSel,
6754
14
      { "serviceStateSel", "h248.serviceStateSel",
6755
14
        FT_UINT32, BASE_DEC, VALS(h248_ServiceState_vals), 0,
6756
14
        "ServiceState", HFILL }},
6757
14
    { &hf_h248_requestID,
6758
14
      { "requestID", "h248.requestID",
6759
14
        FT_UINT32, BASE_DEC, NULL, 0,
6760
14
        NULL, HFILL }},
6761
14
    { &hf_h248_iAEDPkgdName,
6762
14
      { "pkgdName", "h248.iAEDPkgdName",
6763
14
        FT_BYTES, BASE_NONE, NULL, 0,
6764
14
        NULL, HFILL }},
6765
14
    { &hf_h248_iAEBDEventName,
6766
14
      { "eventName", "h248.iAEBDEventName",
6767
14
        FT_BYTES, BASE_NONE, NULL, 0,
6768
14
        "PkgdName", HFILL }},
6769
14
    { &hf_h248_indAudSignal,
6770
14
      { "signal", "h248.indAudSignal_element",
6771
14
        FT_NONE, BASE_NONE, NULL, 0,
6772
14
        "IndAudSignal", HFILL }},
6773
14
    { &hf_h248_indAudSeqSigList,
6774
14
      { "seqSigList", "h248.indAudSeqSigList_element",
6775
14
        FT_NONE, BASE_NONE, NULL, 0,
6776
14
        "IndAudSeqSigList", HFILL }},
6777
14
    { &hf_h248_id,
6778
14
      { "id", "h248.id",
6779
14
        FT_UINT32, BASE_DEC, NULL, 0,
6780
14
        "INTEGER_0_65535", HFILL }},
6781
14
    { &hf_h248_iASignalList,
6782
14
      { "signalList", "h248.iASignalList_element",
6783
14
        FT_NONE, BASE_NONE, NULL, 0,
6784
14
        "IndAudSignal", HFILL }},
6785
14
    { &hf_h248_iASignalName,
6786
14
      { "signalName", "h248.iASignalName",
6787
14
        FT_BYTES, BASE_NONE, NULL, 0,
6788
14
        "PkgdName", HFILL }},
6789
14
    { &hf_h248_signalRequestID,
6790
14
      { "signalRequestID", "h248.signalRequestID",
6791
14
        FT_UINT32, BASE_DEC, NULL, 0,
6792
14
        "RequestID", HFILL }},
6793
14
    { &hf_h248_digitMapName,
6794
14
      { "digitMapName", "h248.digitMapName",
6795
14
        FT_BYTES, BASE_NONE, NULL, 0,
6796
14
        NULL, HFILL }},
6797
14
    { &hf_h248_iAStatName,
6798
14
      { "statName", "h248.iAStatName",
6799
14
        FT_BYTES, BASE_NONE, NULL, 0,
6800
14
        "PkgdName", HFILL }},
6801
14
    { &hf_h248_packageName,
6802
14
      { "packageName", "h248.packageName",
6803
14
        FT_BYTES, BASE_NONE, NULL, 0,
6804
14
        "Name", HFILL }},
6805
14
    { &hf_h248_packageVersion,
6806
14
      { "packageVersion", "h248.packageVersion",
6807
14
        FT_UINT32, BASE_DEC, NULL, 0,
6808
14
        "INTEGER_0_99", HFILL }},
6809
14
    { &hf_h248_requestId,
6810
14
      { "requestId", "h248.requestId",
6811
14
        FT_UINT32, BASE_DEC, NULL, 0,
6812
14
        NULL, HFILL }},
6813
14
    { &hf_h248_observedEventLst,
6814
14
      { "observedEventLst", "h248.observedEventLst",
6815
14
        FT_UINT32, BASE_DEC, NULL, 0,
6816
14
        "SEQUENCE_OF_ObservedEvent", HFILL }},
6817
14
    { &hf_h248_observedEventLst_item,
6818
14
      { "ObservedEvent", "h248.ObservedEvent_element",
6819
14
        FT_NONE, BASE_NONE, NULL, 0,
6820
14
        NULL, HFILL }},
6821
14
    { &hf_h248_eventName,
6822
14
      { "eventName", "h248.eventName",
6823
14
        FT_BYTES, BASE_NONE, NULL, 0,
6824
14
        NULL, HFILL }},
6825
14
    { &hf_h248_eventParList,
6826
14
      { "eventParList", "h248.eventParList",
6827
14
        FT_UINT32, BASE_DEC, NULL, 0,
6828
14
        "SEQUENCE_OF_EventParameter", HFILL }},
6829
14
    { &hf_h248_eventParList_item,
6830
14
      { "EventParameter", "h248.EventParameter_element",
6831
14
        FT_NONE, BASE_NONE, NULL, 0,
6832
14
        NULL, HFILL }},
6833
14
    { &hf_h248_timeNotation,
6834
14
      { "timeNotation", "h248.timeNotation_element",
6835
14
        FT_NONE, BASE_NONE, NULL, 0,
6836
14
        NULL, HFILL }},
6837
14
    { &hf_h248_eventParameterName,
6838
14
      { "eventParameterName", "h248.eventParameterName",
6839
14
        FT_BYTES, BASE_NONE, NULL, 0,
6840
14
        NULL, HFILL }},
6841
14
    { &hf_h248_eventParamValue,
6842
14
      { "eventParamValue", "h248.eventParamValue",
6843
14
        FT_UINT32, BASE_DEC, NULL, 0,
6844
14
        "EventParamValues", HFILL }},
6845
14
    { &hf_h248_eventPar_extraInfo,
6846
14
      { "extraInfo", "h248.eventPar_extraInfo",
6847
14
        FT_UINT32, BASE_DEC, VALS(h248_EventPar_extraInfo_vals), 0,
6848
14
        "EventPar_extraInfo", HFILL }},
6849
14
    { &hf_h248_relation,
6850
14
      { "relation", "h248.relation",
6851
14
        FT_UINT32, BASE_DEC, VALS(h248_Relation_vals), 0,
6852
14
        NULL, HFILL }},
6853
14
    { &hf_h248_range,
6854
14
      { "range", "h248.range",
6855
14
        FT_BOOLEAN, BASE_NONE, NULL, 0,
6856
14
        "BOOLEAN", HFILL }},
6857
14
    { &hf_h248_sublist,
6858
14
      { "sublist", "h248.sublist",
6859
14
        FT_BOOLEAN, BASE_NONE, NULL, 0,
6860
14
        "BOOLEAN", HFILL }},
6861
14
    { &hf_h248_EventParamValues_item,
6862
14
      { "EventParamValue", "h248.EventParamValue",
6863
14
        FT_BYTES, BASE_NONE, NULL, 0,
6864
14
        NULL, HFILL }},
6865
14
    { &hf_h248_serviceChangeParms,
6866
14
      { "serviceChangeParms", "h248.serviceChangeParms_element",
6867
14
        FT_NONE, BASE_NONE, NULL, 0,
6868
14
        "ServiceChangeParm", HFILL }},
6869
14
    { &hf_h248_serviceChangeResult,
6870
14
      { "serviceChangeResult", "h248.serviceChangeResult",
6871
14
        FT_UINT32, BASE_DEC, VALS(h248_ServiceChangeResult_vals), 0,
6872
14
        NULL, HFILL }},
6873
14
    { &hf_h248_serviceChangeResParms,
6874
14
      { "serviceChangeResParms", "h248.serviceChangeResParms_element",
6875
14
        FT_NONE, BASE_NONE, NULL, 0,
6876
14
        "ServiceChangeResParm", HFILL }},
6877
14
    { &hf_h248_wildcard,
6878
14
      { "wildcard", "h248.wildcard",
6879
14
        FT_UINT32, BASE_DEC, NULL, 0,
6880
14
        "SEQUENCE_OF_WildcardField", HFILL }},
6881
14
    { &hf_h248_wildcard_item,
6882
14
      { "WildcardField", "h248.WildcardField",
6883
14
        FT_BYTES, BASE_NONE, NULL, 0,
6884
14
        NULL, HFILL }},
6885
14
    { &hf_h248_terminationId,
6886
14
      { "id", "h248.terminationId",
6887
14
        FT_BYTES, BASE_NONE, NULL, 0,
6888
14
        "T_terminationId", HFILL }},
6889
14
    { &hf_h248_TerminationIDList_item,
6890
14
      { "TerminationID", "h248.TerminationID_element",
6891
14
        FT_NONE, BASE_NONE, NULL, 0,
6892
14
        NULL, HFILL }},
6893
14
    { &hf_h248_termStateDescr,
6894
14
      { "termStateDescr", "h248.termStateDescr_element",
6895
14
        FT_NONE, BASE_NONE, NULL, 0,
6896
14
        "TerminationStateDescriptor", HFILL }},
6897
14
    { &hf_h248_streams,
6898
14
      { "streams", "h248.streams",
6899
14
        FT_UINT32, BASE_DEC, VALS(h248_T_streams_vals), 0,
6900
14
        NULL, HFILL }},
6901
14
    { &hf_h248_mediaDescriptorOneStream,
6902
14
      { "oneStream", "h248.mediaDescriptorOneStream_element",
6903
14
        FT_NONE, BASE_NONE, NULL, 0,
6904
14
        "StreamParms", HFILL }},
6905
14
    { &hf_h248_mediaDescriptorMultiStream,
6906
14
      { "multiStream", "h248.mediaDescriptorMultiStream",
6907
14
        FT_UINT32, BASE_DEC, NULL, 0,
6908
14
        "SEQUENCE_OF_StreamDescriptor", HFILL }},
6909
14
    { &hf_h248_mediaDescriptorMultiStream_item,
6910
14
      { "StreamDescriptor", "h248.StreamDescriptor_element",
6911
14
        FT_NONE, BASE_NONE, NULL, 0,
6912
14
        NULL, HFILL }},
6913
14
    { &hf_h248_streamParms,
6914
14
      { "streamParms", "h248.streamParms_element",
6915
14
        FT_NONE, BASE_NONE, NULL, 0,
6916
14
        NULL, HFILL }},
6917
14
    { &hf_h248_localControlDescriptor,
6918
14
      { "localControlDescriptor", "h248.localControlDescriptor_element",
6919
14
        FT_NONE, BASE_NONE, NULL, 0,
6920
14
        NULL, HFILL }},
6921
14
    { &hf_h248_localDescriptor,
6922
14
      { "localDescriptor", "h248.localDescriptor_element",
6923
14
        FT_NONE, BASE_NONE, NULL, 0,
6924
14
        "LocalRemoteDescriptor", HFILL }},
6925
14
    { &hf_h248_remoteDescriptor,
6926
14
      { "remoteDescriptor", "h248.remoteDescriptor_element",
6927
14
        FT_NONE, BASE_NONE, NULL, 0,
6928
14
        "LocalRemoteDescriptor", HFILL }},
6929
14
    { &hf_h248_sPstatisticsDescriptor,
6930
14
      { "statisticsDescriptor", "h248.sPstatisticsDescriptor",
6931
14
        FT_UINT32, BASE_DEC, NULL, 0,
6932
14
        NULL, HFILL }},
6933
14
    { &hf_h248_streamMode,
6934
14
      { "streamMode", "h248.streamMode",
6935
14
        FT_UINT32, BASE_DEC, VALS(h248_StreamMode_vals), 0,
6936
14
        NULL, HFILL }},
6937
14
    { &hf_h248_reserveValue,
6938
14
      { "reserveValue", "h248.reserveValue",
6939
14
        FT_BOOLEAN, BASE_NONE, NULL, 0,
6940
14
        "BOOLEAN", HFILL }},
6941
14
    { &hf_h248_reserveGroup,
6942
14
      { "reserveGroup", "h248.reserveGroup",
6943
14
        FT_BOOLEAN, BASE_NONE, NULL, 0,
6944
14
        "BOOLEAN", HFILL }},
6945
14
    { &hf_h248_lCDpropertyParms,
6946
14
      { "propertyParms", "h248.lCDpropertyParms",
6947
14
        FT_UINT32, BASE_DEC, NULL, 0,
6948
14
        "SEQUENCE_OF_PropertyParm", HFILL }},
6949
14
    { &hf_h248_lCDpropertyParms_item,
6950
14
      { "PropertyParm", "h248.PropertyParm_element",
6951
14
        FT_NONE, BASE_NONE, NULL, 0,
6952
14
        NULL, HFILL }},
6953
14
    { &hf_h248_propertyName,
6954
14
      { "propertyName", "h248.propertyName",
6955
14
        FT_BYTES, BASE_NONE, NULL, 0,
6956
14
        NULL, HFILL }},
6957
14
    { &hf_h248_propertyParamValue,
6958
14
      { "value", "h248.propertyParamValue",
6959
14
        FT_UINT32, BASE_DEC, NULL, 0,
6960
14
        "SEQUENCE_OF_PropertyID", HFILL }},
6961
14
    { &hf_h248_propertyParamValue_item,
6962
14
      { "PropertyID", "h248.PropertyID",
6963
14
        FT_BYTES, BASE_NONE, NULL, 0,
6964
14
        NULL, HFILL }},
6965
14
    { &hf_h248_propParm_extraInfo,
6966
14
      { "extraInfo", "h248.propParm_extraInfo",
6967
14
        FT_UINT32, BASE_DEC, VALS(h248_PropParm_extraInfo_vals), 0,
6968
14
        "PropParm_extraInfo", HFILL }},
6969
14
    { &hf_h248_propGrps,
6970
14
      { "propGrps", "h248.propGrps",
6971
14
        FT_UINT32, BASE_DEC, NULL, 0,
6972
14
        "SEQUENCE_OF_PropertyGroup", HFILL }},
6973
14
    { &hf_h248_propGrps_item,
6974
14
      { "PropertyGroup", "h248.PropertyGroup",
6975
14
        FT_UINT32, BASE_DEC, NULL, 0,
6976
14
        NULL, HFILL }},
6977
14
    { &hf_h248_PropertyGroup_item,
6978
14
      { "PropertyParm", "h248.PropertyParm_element",
6979
14
        FT_NONE, BASE_NONE, NULL, 0,
6980
14
        NULL, HFILL }},
6981
14
    { &hf_h248_tSDpropertyParms,
6982
14
      { "propertyParms", "h248.tSDpropertyParms",
6983
14
        FT_UINT32, BASE_DEC, NULL, 0,
6984
14
        "SEQUENCE_OF_PropertyParm", HFILL }},
6985
14
    { &hf_h248_tSDpropertyParms_item,
6986
14
      { "PropertyParm", "h248.PropertyParm_element",
6987
14
        FT_NONE, BASE_NONE, NULL, 0,
6988
14
        NULL, HFILL }},
6989
14
    { &hf_h248_tSEventBufferControl,
6990
14
      { "eventBufferControl", "h248.tSEventBufferControl",
6991
14
        FT_UINT32, BASE_DEC, VALS(h248_EventBufferControl_vals), 0,
6992
14
        NULL, HFILL }},
6993
14
    { &hf_h248_serviceState,
6994
14
      { "serviceState", "h248.serviceState",
6995
14
        FT_UINT32, BASE_DEC, VALS(h248_ServiceState_vals), 0,
6996
14
        NULL, HFILL }},
6997
14
    { &hf_h248_muxType,
6998
14
      { "muxType", "h248.muxType",
6999
14
        FT_UINT32, BASE_DEC, VALS(h248_MuxType_vals), 0,
7000
14
        NULL, HFILL }},
7001
14
    { &hf_h248_termList,
7002
14
      { "termList", "h248.termList",
7003
14
        FT_UINT32, BASE_DEC, NULL, 0,
7004
14
        "SEQUENCE_OF_TerminationID", HFILL }},
7005
14
    { &hf_h248_termList_item,
7006
14
      { "TerminationID", "h248.TerminationID_element",
7007
14
        FT_NONE, BASE_NONE, NULL, 0,
7008
14
        NULL, HFILL }},
7009
14
    { &hf_h248_nonStandardData,
7010
14
      { "nonStandardData", "h248.nonStandardData_element",
7011
14
        FT_NONE, BASE_NONE, NULL, 0,
7012
14
        NULL, HFILL }},
7013
14
    { &hf_h248_eventList,
7014
14
      { "eventList", "h248.eventList",
7015
14
        FT_UINT32, BASE_DEC, NULL, 0,
7016
14
        "SEQUENCE_OF_RequestedEvent", HFILL }},
7017
14
    { &hf_h248_eventList_item,
7018
14
      { "RequestedEvent", "h248.RequestedEvent_element",
7019
14
        FT_NONE, BASE_NONE, NULL, 0,
7020
14
        NULL, HFILL }},
7021
14
    { &hf_h248_eventAction,
7022
14
      { "eventAction", "h248.eventAction_element",
7023
14
        FT_NONE, BASE_NONE, NULL, 0,
7024
14
        "RequestedActions", HFILL }},
7025
14
    { &hf_h248_evParList,
7026
14
      { "evParList", "h248.evParList",
7027
14
        FT_UINT32, BASE_DEC, NULL, 0,
7028
14
        "SEQUENCE_OF_EventParameter", HFILL }},
7029
14
    { &hf_h248_evParList_item,
7030
14
      { "EventParameter", "h248.EventParameter_element",
7031
14
        FT_NONE, BASE_NONE, NULL, 0,
7032
14
        NULL, HFILL }},
7033
14
    { &hf_h248_secondEvent,
7034
14
      { "secondEvent", "h248.secondEvent_element",
7035
14
        FT_NONE, BASE_NONE, NULL, 0,
7036
14
        "SecondEventsDescriptor", HFILL }},
7037
14
    { &hf_h248_notifyImmediate,
7038
14
      { "notifyImmediate", "h248.notifyImmediate_element",
7039
14
        FT_NONE, BASE_NONE, NULL, 0,
7040
14
        NULL, HFILL }},
7041
14
    { &hf_h248_notifyRegulated,
7042
14
      { "notifyRegulated", "h248.notifyRegulated_element",
7043
14
        FT_NONE, BASE_NONE, NULL, 0,
7044
14
        "RegulatedEmbeddedDescriptor", HFILL }},
7045
14
    { &hf_h248_neverNotify,
7046
14
      { "neverNotify", "h248.neverNotify_element",
7047
14
        FT_NONE, BASE_NONE, NULL, 0,
7048
14
        NULL, HFILL }},
7049
14
    { &hf_h248_keepActive,
7050
14
      { "keepActive", "h248.keepActive",
7051
14
        FT_BOOLEAN, BASE_NONE, NULL, 0,
7052
14
        "BOOLEAN", HFILL }},
7053
14
    { &hf_h248_eventDM,
7054
14
      { "eventDM", "h248.eventDM",
7055
14
        FT_UINT32, BASE_DEC, VALS(h248_EventDM_vals), 0,
7056
14
        NULL, HFILL }},
7057
14
    { &hf_h248_notifyBehaviour,
7058
14
      { "notifyBehaviour", "h248.notifyBehaviour",
7059
14
        FT_UINT32, BASE_DEC, VALS(h248_NotifyBehaviour_vals), 0,
7060
14
        NULL, HFILL }},
7061
14
    { &hf_h248_resetEventsDescriptor,
7062
14
      { "resetEventsDescriptor", "h248.resetEventsDescriptor_element",
7063
14
        FT_NONE, BASE_NONE, NULL, 0,
7064
14
        NULL, HFILL }},
7065
14
    { &hf_h248_digitMapValue,
7066
14
      { "digitMapValue", "h248.digitMapValue_element",
7067
14
        FT_NONE, BASE_NONE, NULL, 0,
7068
14
        NULL, HFILL }},
7069
14
    { &hf_h248_secondaryEventList,
7070
14
      { "eventList", "h248.secondaryEventList",
7071
14
        FT_UINT32, BASE_DEC, NULL, 0,
7072
14
        "SEQUENCE_OF_SecondRequestedEvent", HFILL }},
7073
14
    { &hf_h248_secondaryEventList_item,
7074
14
      { "SecondRequestedEvent", "h248.SecondRequestedEvent_element",
7075
14
        FT_NONE, BASE_NONE, NULL, 0,
7076
14
        NULL, HFILL }},
7077
14
    { &hf_h248_pkgdName,
7078
14
      { "pkgdName", "h248.pkgdName",
7079
14
        FT_BYTES, BASE_NONE, NULL, 0,
7080
14
        NULL, HFILL }},
7081
14
    { &hf_h248_secondaryEventAction,
7082
14
      { "eventAction", "h248.secondaryEventAction_element",
7083
14
        FT_NONE, BASE_NONE, NULL, 0,
7084
14
        "SecondRequestedActions", HFILL }},
7085
14
    { &hf_h248_EventBufferDescriptor_item,
7086
14
      { "EventSpec", "h248.EventSpec_element",
7087
14
        FT_NONE, BASE_NONE, NULL, 0,
7088
14
        NULL, HFILL }},
7089
14
    { &hf_h248_SignalsDescriptor_item,
7090
14
      { "SignalRequest", "h248.SignalRequest",
7091
14
        FT_UINT32, BASE_DEC, VALS(h248_SignalRequest_vals), 0,
7092
14
        NULL, HFILL }},
7093
14
    { &hf_h248_signal,
7094
14
      { "signal", "h248.signal_element",
7095
14
        FT_NONE, BASE_NONE, NULL, 0,
7096
14
        NULL, HFILL }},
7097
14
    { &hf_h248_seqSigList,
7098
14
      { "seqSigList", "h248.seqSigList_element",
7099
14
        FT_NONE, BASE_NONE, NULL, 0,
7100
14
        NULL, HFILL }},
7101
14
    { &hf_h248_signalList,
7102
14
      { "signalList", "h248.signalList",
7103
14
        FT_UINT32, BASE_DEC, NULL, 0,
7104
14
        "SEQUENCE_OF_Signal", HFILL }},
7105
14
    { &hf_h248_signalList_item,
7106
14
      { "Signal", "h248.Signal_element",
7107
14
        FT_NONE, BASE_NONE, NULL, 0,
7108
14
        NULL, HFILL }},
7109
14
    { &hf_h248_signalName,
7110
14
      { "signalName", "h248.signalName",
7111
14
        FT_BYTES, BASE_NONE, NULL, 0,
7112
14
        NULL, HFILL }},
7113
14
    { &hf_h248_sigType,
7114
14
      { "sigType", "h248.sigType",
7115
14
        FT_UINT32, BASE_DEC, VALS(h248_SignalType_vals), 0,
7116
14
        "SignalType", HFILL }},
7117
14
    { &hf_h248_duration,
7118
14
      { "duration", "h248.duration",
7119
14
        FT_UINT32, BASE_DEC, NULL, 0,
7120
14
        "INTEGER_0_65535", HFILL }},
7121
14
    { &hf_h248_notifyCompletion,
7122
14
      { "notifyCompletion", "h248.notifyCompletion",
7123
14
        FT_BYTES, BASE_NONE, NULL, 0,
7124
14
        NULL, HFILL }},
7125
14
    { &hf_h248_sigParList,
7126
14
      { "sigParList", "h248.sigParList",
7127
14
        FT_UINT32, BASE_DEC, NULL, 0,
7128
14
        "SEQUENCE_OF_SigParameter", HFILL }},
7129
14
    { &hf_h248_sigParList_item,
7130
14
      { "SigParameter", "h248.SigParameter_element",
7131
14
        FT_NONE, BASE_NONE, NULL, 0,
7132
14
        NULL, HFILL }},
7133
14
    { &hf_h248_direction,
7134
14
      { "direction", "h248.direction",
7135
14
        FT_UINT32, BASE_DEC, VALS(h248_SignalDirection_vals), 0,
7136
14
        "SignalDirection", HFILL }},
7137
14
    { &hf_h248_intersigDelay,
7138
14
      { "intersigDelay", "h248.intersigDelay",
7139
14
        FT_UINT32, BASE_DEC, NULL, 0,
7140
14
        "INTEGER_0_65535", HFILL }},
7141
14
    { &hf_h248_sigParameterName,
7142
14
      { "sigParameterName", "h248.sigParameterName",
7143
14
        FT_BYTES, BASE_NONE, NULL, 0,
7144
14
        NULL, HFILL }},
7145
14
    { &hf_h248_value,
7146
14
      { "value", "h248.value",
7147
14
        FT_UINT32, BASE_DEC, NULL, 0,
7148
14
        "SigParamValues", HFILL }},
7149
14
    { &hf_h248_extraInfo,
7150
14
      { "extraInfo", "h248.extraInfo",
7151
14
        FT_UINT32, BASE_DEC, VALS(h248_T_extraInfo_vals), 0,
7152
14
        NULL, HFILL }},
7153
14
    { &hf_h248_SigParamValues_item,
7154
14
      { "SigParamValue", "h248.SigParamValue",
7155
14
        FT_BYTES, BASE_NONE, NULL, 0,
7156
14
        NULL, HFILL }},
7157
14
    { &hf_h248_mtl,
7158
14
      { "mtl", "h248.mtl",
7159
14
        FT_UINT32, BASE_DEC, NULL, 0,
7160
14
        "SEQUENCE_OF_ModemType", HFILL }},
7161
14
    { &hf_h248_mtl_item,
7162
14
      { "ModemType", "h248.ModemType",
7163
14
        FT_UINT32, BASE_DEC, VALS(h248_ModemType_vals), 0,
7164
14
        NULL, HFILL }},
7165
14
    { &hf_h248_mpl,
7166
14
      { "mpl", "h248.mpl",
7167
14
        FT_UINT32, BASE_DEC, NULL, 0,
7168
14
        "SEQUENCE_OF_PropertyParm", HFILL }},
7169
14
    { &hf_h248_mpl_item,
7170
14
      { "PropertyParm", "h248.PropertyParm_element",
7171
14
        FT_NONE, BASE_NONE, NULL, 0,
7172
14
        NULL, HFILL }},
7173
14
    { &hf_h248_startTimer,
7174
14
      { "startTimer", "h248.startTimer",
7175
14
        FT_UINT32, BASE_DEC, NULL, 0,
7176
14
        "INTEGER_0_99", HFILL }},
7177
14
    { &hf_h248_shortTimer,
7178
14
      { "shortTimer", "h248.shortTimer",
7179
14
        FT_UINT32, BASE_DEC, NULL, 0,
7180
14
        "INTEGER_0_99", HFILL }},
7181
14
    { &hf_h248_longTimer,
7182
14
      { "longTimer", "h248.longTimer",
7183
14
        FT_UINT32, BASE_DEC, NULL, 0,
7184
14
        "INTEGER_0_99", HFILL }},
7185
14
    { &hf_h248_digitMapBody,
7186
14
      { "digitMapBody", "h248.digitMapBody",
7187
14
        FT_STRING, BASE_NONE, NULL, 0,
7188
14
        "IA5String", HFILL }},
7189
14
    { &hf_h248_durationTimer,
7190
14
      { "durationTimer", "h248.durationTimer",
7191
14
        FT_UINT32, BASE_DEC, NULL, 0,
7192
14
        "INTEGER_0_99", HFILL }},
7193
14
    { &hf_h248_serviceChangeMethod,
7194
14
      { "serviceChangeMethod", "h248.serviceChangeMethod",
7195
14
        FT_UINT32, BASE_DEC, VALS(h248_ServiceChangeMethod_vals), 0,
7196
14
        NULL, HFILL }},
7197
14
    { &hf_h248_serviceChangeAddress,
7198
14
      { "serviceChangeAddress", "h248.serviceChangeAddress",
7199
14
        FT_UINT32, BASE_DEC, VALS(h248_ServiceChangeAddress_vals), 0,
7200
14
        NULL, HFILL }},
7201
14
    { &hf_h248_serviceChangeVersion,
7202
14
      { "serviceChangeVersion", "h248.serviceChangeVersion",
7203
14
        FT_UINT32, BASE_DEC, NULL, 0,
7204
14
        "INTEGER_0_99", HFILL }},
7205
14
    { &hf_h248_serviceChangeProfile,
7206
14
      { "serviceChangeProfile", "h248.serviceChangeProfile_element",
7207
14
        FT_NONE, BASE_NONE, NULL, 0,
7208
14
        NULL, HFILL }},
7209
14
    { &hf_h248_serviceChangeReason,
7210
14
      { "serviceChangeReason", "h248.serviceChangeReason",
7211
14
        FT_UINT32, BASE_DEC, NULL, 0,
7212
14
        "SCreasonValue", HFILL }},
7213
14
    { &hf_h248_serviceChangeDelay,
7214
14
      { "serviceChangeDelay", "h248.serviceChangeDelay",
7215
14
        FT_UINT32, BASE_DEC, NULL, 0,
7216
14
        "INTEGER_0_4294967295", HFILL }},
7217
14
    { &hf_h248_serviceChangeMgcId,
7218
14
      { "serviceChangeMgcId", "h248.serviceChangeMgcId",
7219
14
        FT_UINT32, BASE_DEC, VALS(h248_MId_vals), 0,
7220
14
        "MId", HFILL }},
7221
14
    { &hf_h248_timeStamp,
7222
14
      { "timeStamp", "h248.timeStamp_element",
7223
14
        FT_NONE, BASE_NONE, NULL, 0,
7224
14
        "TimeNotation", HFILL }},
7225
14
    { &hf_h248_serviceChangeInfo,
7226
14
      { "serviceChangeInfo", "h248.serviceChangeInfo_element",
7227
14
        FT_NONE, BASE_NONE, NULL, 0,
7228
14
        "AuditDescriptor", HFILL }},
7229
14
    { &hf_h248_serviceChangeIncompleteFlag,
7230
14
      { "serviceChangeIncompleteFlag", "h248.serviceChangeIncompleteFlag_element",
7231
14
        FT_NONE, BASE_NONE, NULL, 0,
7232
14
        NULL, HFILL }},
7233
14
    { &hf_h248_SCreasonValue_item,
7234
14
      { "SCreasonValueOctetStr", "h248.SCreasonValueOctetStr",
7235
14
        FT_BYTES, BASE_NONE, NULL, 0,
7236
14
        NULL, HFILL }},
7237
14
    { &hf_h248_timestamp,
7238
14
      { "timestamp", "h248.timestamp_element",
7239
14
        FT_NONE, BASE_NONE, NULL, 0,
7240
14
        "TimeNotation", HFILL }},
7241
14
    { &hf_h248_profileName,
7242
14
      { "profileName", "h248.profileName",
7243
14
        FT_STRING, BASE_NONE, NULL, 0,
7244
14
        "IA5String_SIZE_1_67", HFILL }},
7245
14
    { &hf_h248_PackagesDescriptor_item,
7246
14
      { "PackagesItem", "h248.PackagesItem_element",
7247
14
        FT_NONE, BASE_NONE, NULL, 0,
7248
14
        NULL, HFILL }},
7249
14
    { &hf_h248_StatisticsDescriptor_item,
7250
14
      { "StatisticsParameter", "h248.StatisticsParameter_element",
7251
14
        FT_NONE, BASE_NONE, NULL, 0,
7252
14
        NULL, HFILL }},
7253
14
    { &hf_h248_statName,
7254
14
      { "statName", "h248.statName",
7255
14
        FT_BYTES, BASE_NONE, NULL, 0,
7256
14
        NULL, HFILL }},
7257
14
    { &hf_h248_statValue,
7258
14
      { "statValue", "h248.statValue",
7259
14
        FT_UINT32, BASE_DEC, NULL, 0,
7260
14
        NULL, HFILL }},
7261
14
    { &hf_h248_nonStandardIdentifier,
7262
14
      { "nonStandardIdentifier", "h248.nonStandardIdentifier",
7263
14
        FT_UINT32, BASE_DEC, VALS(h248_NonStandardIdentifier_vals), 0,
7264
14
        NULL, HFILL }},
7265
14
    { &hf_h248_data,
7266
14
      { "data", "h248.data",
7267
14
        FT_BYTES, BASE_NONE, NULL, 0,
7268
14
        "OCTET_STRING", HFILL }},
7269
14
    { &hf_h248_object,
7270
14
      { "object", "h248.object",
7271
14
        FT_OID, BASE_NONE, NULL, 0,
7272
14
        "OBJECT_IDENTIFIER", HFILL }},
7273
14
    { &hf_h248_h221NonStandard,
7274
14
      { "h221NonStandard", "h248.h221NonStandard_element",
7275
14
        FT_NONE, BASE_NONE, NULL, 0,
7276
14
        NULL, HFILL }},
7277
14
    { &hf_h248_experimental,
7278
14
      { "experimental", "h248.experimental",
7279
14
        FT_STRING, BASE_NONE, NULL, 0,
7280
14
        "IA5String_SIZE_8", HFILL }},
7281
14
    { &hf_h248_t35CountryCode1,
7282
14
      { "t35CountryCode1", "h248.t35CountryCode1",
7283
14
        FT_UINT32, BASE_DEC, NULL, 0,
7284
14
        "INTEGER_0_255", HFILL }},
7285
14
    { &hf_h248_t35CountryCode2,
7286
14
      { "t35CountryCode2", "h248.t35CountryCode2",
7287
14
        FT_UINT32, BASE_DEC, NULL, 0,
7288
14
        "INTEGER_0_255", HFILL }},
7289
14
    { &hf_h248_t35Extension,
7290
14
      { "t35Extension", "h248.t35Extension",
7291
14
        FT_UINT32, BASE_DEC, NULL, 0,
7292
14
        "INTEGER_0_255", HFILL }},
7293
14
    { &hf_h248_manufacturerCode,
7294
14
      { "manufacturerCode", "h248.manufacturerCode",
7295
14
        FT_UINT32, BASE_DEC, NULL, 0,
7296
14
        "INTEGER_0_65535", HFILL }},
7297
14
    { &hf_h248_date,
7298
14
      { "date", "h248.date",
7299
14
        FT_STRING, BASE_NONE, NULL, 0,
7300
14
        "IA5String_SIZE_8", HFILL }},
7301
14
    { &hf_h248_time,
7302
14
      { "time", "h248.time",
7303
14
        FT_STRING, BASE_NONE, NULL, 0,
7304
14
        "IA5String_SIZE_8", HFILL }},
7305
14
    { &hf_h248_Value_item,
7306
14
      { "Value item", "h248.Value_item",
7307
14
        FT_BYTES, BASE_NONE, NULL, 0,
7308
14
        "OCTET_STRING", HFILL }},
7309
14
    { &hf_h248_audit_result,
7310
14
      { "auditResult", "h248.audit_result",
7311
14
        FT_UINT32, BASE_DEC, VALS(h248_AuditResultV1_vals), 0,
7312
14
        "AuditResultV1", HFILL }},
7313
14
    { &hf_h248_contectAuditResult,
7314
14
      { "contectAuditResult", "h248.contectAuditResult_element",
7315
14
        FT_NONE, BASE_NONE, NULL, 0,
7316
14
        "TerminationID", HFILL }},
7317
14
    { &hf_h248_eventParamterName,
7318
14
      { "eventParamterName", "h248.eventParamterName",
7319
14
        FT_BYTES, BASE_NONE, NULL, 0,
7320
14
        "EventParameterName", HFILL }},
7321
14
    { &hf_h248_event_param_value,
7322
14
      { "value", "h248.event_param_value",
7323
14
        FT_BYTES, BASE_NONE, NULL, 0,
7324
14
        "EventParamValueV1", HFILL }},
7325
14
    { &hf_h248_sig_param_value,
7326
14
      { "value", "h248.sig_param_value",
7327
14
        FT_BYTES, BASE_NONE, NULL, 0,
7328
14
        "SigParamValueV1", HFILL }},
7329
14
    { &hf_h248_T_auditToken_muxToken,
7330
14
      { "muxToken", "h248.T.auditToken.muxToken",
7331
14
        FT_BOOLEAN, 8, NULL, 0x80,
7332
14
        NULL, HFILL }},
7333
14
    { &hf_h248_T_auditToken_modemToken,
7334
14
      { "modemToken", "h248.T.auditToken.modemToken",
7335
14
        FT_BOOLEAN, 8, NULL, 0x40,
7336
14
        NULL, HFILL }},
7337
14
    { &hf_h248_T_auditToken_mediaToken,
7338
14
      { "mediaToken", "h248.T.auditToken.mediaToken",
7339
14
        FT_BOOLEAN, 8, NULL, 0x20,
7340
14
        NULL, HFILL }},
7341
14
    { &hf_h248_T_auditToken_eventsToken,
7342
14
      { "eventsToken", "h248.T.auditToken.eventsToken",
7343
14
        FT_BOOLEAN, 8, NULL, 0x10,
7344
14
        NULL, HFILL }},
7345
14
    { &hf_h248_T_auditToken_signalsToken,
7346
14
      { "signalsToken", "h248.T.auditToken.signalsToken",
7347
14
        FT_BOOLEAN, 8, NULL, 0x08,
7348
14
        NULL, HFILL }},
7349
14
    { &hf_h248_T_auditToken_digitMapToken,
7350
14
      { "digitMapToken", "h248.T.auditToken.digitMapToken",
7351
14
        FT_BOOLEAN, 8, NULL, 0x04,
7352
14
        NULL, HFILL }},
7353
14
    { &hf_h248_T_auditToken_statsToken,
7354
14
      { "statsToken", "h248.T.auditToken.statsToken",
7355
14
        FT_BOOLEAN, 8, NULL, 0x02,
7356
14
        NULL, HFILL }},
7357
14
    { &hf_h248_T_auditToken_observedEventsToken,
7358
14
      { "observedEventsToken", "h248.T.auditToken.observedEventsToken",
7359
14
        FT_BOOLEAN, 8, NULL, 0x01,
7360
14
        NULL, HFILL }},
7361
14
    { &hf_h248_T_auditToken_packagesToken,
7362
14
      { "packagesToken", "h248.T.auditToken.packagesToken",
7363
14
        FT_BOOLEAN, 8, NULL, 0x80,
7364
14
        NULL, HFILL }},
7365
14
    { &hf_h248_T_auditToken_eventBufferToken,
7366
14
      { "eventBufferToken", "h248.T.auditToken.eventBufferToken",
7367
14
        FT_BOOLEAN, 8, NULL, 0x40,
7368
14
        NULL, HFILL }},
7369
14
    { &hf_h248_NotifyCompletion_onTimeOut,
7370
14
      { "onTimeOut", "h248.NotifyCompletion.onTimeOut",
7371
14
        FT_BOOLEAN, 8, NULL, 0x80,
7372
14
        NULL, HFILL }},
7373
14
    { &hf_h248_NotifyCompletion_onInterruptByEvent,
7374
14
      { "onInterruptByEvent", "h248.NotifyCompletion.onInterruptByEvent",
7375
14
        FT_BOOLEAN, 8, NULL, 0x40,
7376
14
        NULL, HFILL }},
7377
14
    { &hf_h248_NotifyCompletion_onInterruptByNewSignalDescr,
7378
14
      { "onInterruptByNewSignalDescr", "h248.NotifyCompletion.onInterruptByNewSignalDescr",
7379
14
        FT_BOOLEAN, 8, NULL, 0x20,
7380
14
        NULL, HFILL }},
7381
14
    { &hf_h248_NotifyCompletion_otherReason,
7382
14
      { "otherReason", "h248.NotifyCompletion.otherReason",
7383
14
        FT_BOOLEAN, 8, NULL, 0x10,
7384
14
        NULL, HFILL }},
7385
14
    { &hf_h248_NotifyCompletion_onIteration,
7386
14
      { "onIteration", "h248.NotifyCompletion.onIteration",
7387
14
        FT_BOOLEAN, 8, NULL, 0x08,
7388
14
        NULL, HFILL }},
7389
7390
14
        GCP_HF_ARR_ELEMS("h248",h248_arrel)
7391
7392
14
    };
7393
7394
    /* List of subtrees */
7395
14
    static int *ett[] = {
7396
14
        &ett_h248,
7397
14
        &ett_mtpaddress,
7398
14
        &ett_packagename,
7399
14
        &ett_codec,
7400
14
        &ett_wildcard,
7401
14
        &ett_h248_no_pkg,
7402
14
        &ett_h248_no_sig,
7403
14
        &ett_h248_no_evt,
7404
14
        GCP_ETT_ARR_ELEMS(h248_arrel),
7405
7406
14
    &ett_h248_MegacoMessage,
7407
14
    &ett_h248_AuthenticationHeader,
7408
14
    &ett_h248_Message,
7409
14
    &ett_h248_T_messageBody,
7410
14
    &ett_h248_SEQUENCE_OF_Transaction,
7411
14
    &ett_h248_MId,
7412
14
    &ett_h248_DomainName,
7413
14
    &ett_h248_IP4Address,
7414
14
    &ett_h248_IP6Address,
7415
14
    &ett_h248_Transaction,
7416
14
    &ett_h248_TransactionRequest,
7417
14
    &ett_h248_SEQUENCE_OF_ActionRequest,
7418
14
    &ett_h248_TransactionPending,
7419
14
    &ett_h248_TransactionReply,
7420
14
    &ett_h248_T_transactionResult,
7421
14
    &ett_h248_SEQUENCE_OF_ActionReply,
7422
14
    &ett_h248_SegmentReply,
7423
14
    &ett_h248_TransactionResponseAck,
7424
14
    &ett_h248_TransactionAck,
7425
14
    &ett_h248_ErrorDescriptor,
7426
14
    &ett_h248_ActionRequest,
7427
14
    &ett_h248_SEQUENCE_OF_CommandRequest,
7428
14
    &ett_h248_ActionReply,
7429
14
    &ett_h248_SEQUENCE_OF_CommandReply,
7430
14
    &ett_h248_ContextRequest,
7431
14
    &ett_h248_T_topologyReq,
7432
14
    &ett_h248_SEQUENCE_OF_PropertyParm,
7433
14
    &ett_h248_SEQUENCE_OF_ContextIDinList,
7434
14
    &ett_h248_ContextAttrAuditRequest,
7435
14
    &ett_h248_SEQUENCE_OF_IndAudPropertyParm,
7436
14
    &ett_h248_SelectLogic,
7437
14
    &ett_h248_CommandRequest,
7438
14
    &ett_h248_Command,
7439
14
    &ett_h248_CommandReply,
7440
14
    &ett_h248_TopologyRequest,
7441
14
    &ett_h248_AmmRequest,
7442
14
    &ett_h248_SEQUENCE_OF_AmmDescriptor,
7443
14
    &ett_h248_AmmDescriptor,
7444
14
    &ett_h248_AmmsReply,
7445
14
    &ett_h248_SubtractRequest,
7446
14
    &ett_h248_AuditRequest,
7447
14
    &ett_h248_AuditReply,
7448
14
    &ett_h248_AuditResult,
7449
14
    &ett_h248_TermListAuditResult,
7450
14
    &ett_h248_TerminationAudit,
7451
14
    &ett_h248_AuditReturnParameter,
7452
14
    &ett_h248_AuditDescriptor,
7453
14
    &ett_h248_T_auditToken,
7454
14
    &ett_h248_SEQUENCE_OF_IndAuditParameter,
7455
14
    &ett_h248_IndAuditParameter,
7456
14
    &ett_h248_IndAudMediaDescriptor,
7457
14
    &ett_h248_IndAudMediaDescriptorStreams,
7458
14
    &ett_h248_SEQUENCE_OF_IndAudStreamDescriptor,
7459
14
    &ett_h248_IndAudStreamDescriptor,
7460
14
    &ett_h248_IndAudStreamParms,
7461
14
    &ett_h248_IndAudLocalControlDescriptor,
7462
14
    &ett_h248_IndAudPropertyParm,
7463
14
    &ett_h248_IndAudLocalRemoteDescriptor,
7464
14
    &ett_h248_IndAudPropertyGroup,
7465
14
    &ett_h248_IndAudTerminationStateDescriptor,
7466
14
    &ett_h248_IndAudEventsDescriptor,
7467
14
    &ett_h248_IndAudEventBufferDescriptor,
7468
14
    &ett_h248_IndAudSignalsDescriptor,
7469
14
    &ett_h248_IndAudSeqSigList,
7470
14
    &ett_h248_IndAudSignal,
7471
14
    &ett_h248_IndAudDigitMapDescriptor,
7472
14
    &ett_h248_IndAudStatisticsDescriptor,
7473
14
    &ett_h248_IndAudPackagesDescriptor,
7474
14
    &ett_h248_NotifyRequest,
7475
14
    &ett_h248_NotifyReply,
7476
14
    &ett_h248_ObservedEventsDescriptor,
7477
14
    &ett_h248_SEQUENCE_OF_ObservedEvent,
7478
14
    &ett_h248_ObservedEvent,
7479
14
    &ett_h248_SEQUENCE_OF_EventParameter,
7480
14
    &ett_h248_EventParameter,
7481
14
    &ett_h248_EventPar_extraInfo,
7482
14
    &ett_h248_EventParamValues,
7483
14
    &ett_h248_ServiceChangeRequest,
7484
14
    &ett_h248_ServiceChangeReply,
7485
14
    &ett_h248_ServiceChangeResult,
7486
14
    &ett_h248_TerminationID,
7487
14
    &ett_h248_SEQUENCE_OF_WildcardField,
7488
14
    &ett_h248_TerminationIDList,
7489
14
    &ett_h248_MediaDescriptor,
7490
14
    &ett_h248_T_streams,
7491
14
    &ett_h248_SEQUENCE_OF_StreamDescriptor,
7492
14
    &ett_h248_StreamDescriptor,
7493
14
    &ett_h248_StreamParms,
7494
14
    &ett_h248_LocalControlDescriptor,
7495
14
    &ett_h248_PropertyParm,
7496
14
    &ett_h248_SEQUENCE_OF_PropertyID,
7497
14
    &ett_h248_PropParm_extraInfo,
7498
14
    &ett_h248_LocalRemoteDescriptor,
7499
14
    &ett_h248_SEQUENCE_OF_PropertyGroup,
7500
14
    &ett_h248_PropertyGroup,
7501
14
    &ett_h248_TerminationStateDescriptor,
7502
14
    &ett_h248_MuxDescriptor,
7503
14
    &ett_h248_SEQUENCE_OF_TerminationID,
7504
14
    &ett_h248_EventsDescriptor,
7505
14
    &ett_h248_SEQUENCE_OF_RequestedEvent,
7506
14
    &ett_h248_RequestedEvent,
7507
14
    &ett_h248_RegulatedEmbeddedDescriptor,
7508
14
    &ett_h248_NotifyBehaviour,
7509
14
    &ett_h248_RequestedActions,
7510
14
    &ett_h248_EventDM,
7511
14
    &ett_h248_SecondEventsDescriptor,
7512
14
    &ett_h248_SEQUENCE_OF_SecondRequestedEvent,
7513
14
    &ett_h248_SecondRequestedEvent,
7514
14
    &ett_h248_SecondRequestedActions,
7515
14
    &ett_h248_EventBufferDescriptor,
7516
14
    &ett_h248_EventSpec,
7517
14
    &ett_h248_SignalsDescriptor,
7518
14
    &ett_h248_SignalRequest,
7519
14
    &ett_h248_SeqSigList,
7520
14
    &ett_h248_SEQUENCE_OF_Signal,
7521
14
    &ett_h248_Signal,
7522
14
    &ett_h248_SEQUENCE_OF_SigParameter,
7523
14
    &ett_h248_NotifyCompletion,
7524
14
    &ett_h248_SigParameter,
7525
14
    &ett_h248_T_extraInfo,
7526
14
    &ett_h248_SigParamValues,
7527
14
    &ett_h248_ModemDescriptor,
7528
14
    &ett_h248_SEQUENCE_OF_ModemType,
7529
14
    &ett_h248_DigitMapDescriptor,
7530
14
    &ett_h248_DigitMapValue,
7531
14
    &ett_h248_ServiceChangeParm,
7532
14
    &ett_h248_SCreasonValue,
7533
14
    &ett_h248_ServiceChangeAddress,
7534
14
    &ett_h248_ServiceChangeResParm,
7535
14
    &ett_h248_ServiceChangeProfile,
7536
14
    &ett_h248_PackagesDescriptor,
7537
14
    &ett_h248_PackagesItem,
7538
14
    &ett_h248_StatisticsDescriptor,
7539
14
    &ett_h248_StatisticsParameter,
7540
14
    &ett_h248_NonStandardData,
7541
14
    &ett_h248_NonStandardIdentifier,
7542
14
    &ett_h248_H221NonStandard,
7543
14
    &ett_h248_TimeNotation,
7544
14
    &ett_h248_Value,
7545
14
    &ett_h248_AuditReplyV1,
7546
14
    &ett_h248_AuditResultV1,
7547
14
    &ett_h248_EventParameterV1,
7548
14
    &ett_h248_SigParameterV1,
7549
14
    };
7550
7551
14
    static ei_register_info ei[] = {
7552
14
        { &ei_h248_errored_command, { "h248.errored_command", PI_RESPONSE_CODE, PI_WARN, "Errored Command", EXPFILL }},
7553
14
        { &ei_h248_transactionId64, { "h248.transactionId.error", PI_MALFORMED, PI_WARN, "Transaction ID invalid", EXPFILL }},
7554
14
        { &ei_h248_context_id64, { "h248.contextId.error", PI_MALFORMED, PI_WARN, "Context ID invalid", EXPFILL }},
7555
14
        { &ei_h248_octet_string_expected, { "h248.octet_string_expected", PI_PROTOCOL, PI_WARN, "H.248 BER Error: OctetString expected", EXPFILL }},
7556
14
    };
7557
7558
14
    expert_module_t* expert_h248;
7559
14
    module_t *h248_module;
7560
7561
    /* Register protocol */
7562
14
    proto_h248 = proto_register_protocol("H.248 MEGACO", "H.248", "h248");
7563
14
    h248_handle = register_dissector("h248", dissect_h248, proto_h248);
7564
14
    h248_tpkt_handle = register_dissector("h248.tpkt", dissect_h248_tpkt, proto_h248);
7565
7566
    /* Register fields and subtrees */
7567
14
    proto_register_field_array(proto_h248, hf, array_length(hf));
7568
14
    proto_register_subtree_array(ett, array_length(ett));
7569
14
    expert_h248 = expert_register_protocol(proto_h248);
7570
14
    expert_register_field_array(expert_h248, ei, array_length(ei));
7571
7572
14
    subdissector_table = register_dissector_table("h248.magic_num", "H.248 Magic Num", proto_h248, FT_UINT32, BASE_HEX);
7573
7574
14
    h248_module = prefs_register_protocol(proto_h248, NULL);
7575
14
    prefs_register_bool_preference(h248_module, "ctx_info",
7576
14
                                   "Track Context",
7577
14
                                   "Maintain relationships between transactions and contexts and display an extra tree showing context data",
7578
14
                                   &keep_persistent_data);
7579
14
    prefs_register_bool_preference(h248_module, "desegment",
7580
14
                                   "Desegment H.248 over TCP",
7581
14
                                   "Desegment H.248 messages that span more TCP segments",
7582
14
                                   &h248_desegment);
7583
7584
14
    gcp_msgs        = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
7585
14
    gcp_trxs        = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
7586
14
    gcp_ctxs_by_trx = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
7587
14
    gcp_ctxs        = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
7588
7589
14
    h248_tap = register_tap("h248");
7590
14
}
7591
7592
/*--- proto_reg_handoff_h248 -------------------------------------------*/
7593
14
void proto_reg_handoff_h248(void) {
7594
7595
14
    dissector_add_uint("mtp3.service_indicator", MTP_SI_GCP, h248_handle);
7596
14
    h248_term_handle = find_dissector_add_dependency("h248term", proto_h248);
7597
14
    dissector_add_uint_with_preference("tcp.port", H248_PORT, h248_tpkt_handle);
7598
14
    dissector_add_uint_with_preference("udp.port", H248_PORT, h248_handle);
7599
7600
14
    ss7pc_address_type = address_type_get_by_name("AT_SS7PC");
7601
14
    exported_pdu_tap = find_tap_id(EXPORT_PDU_TAP_NAME_LAYER_7);
7602
14
}
7603