summaryrefslogtreecommitdiff
path: root/asn1
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2005-01-13 23:05:59 +0000
committerAnders Broman <anders.broman@ericsson.com>2005-01-13 23:05:59 +0000
commitd5ccbbec0985823603fb9fa405aaaebba2fe86f0 (patch)
tree93dbbc2c35cf6b65aa8793d774531b60e2538f6a /asn1
parent1fb480bcfe2e75258c21a71b64050cd0c8c44376 (diff)
downloadwireshark-d5ccbbec0985823603fb9fa405aaaebba2fe86f0.tar.gz
Add a first draft asn2eth generated H.450.x dissector
svn path=/trunk/; revision=13026
Diffstat (limited to 'asn1')
-rw-r--r--asn1/h450/h450.cnf23
-rw-r--r--asn1/h450/h4501.asn320
-rw-r--r--asn1/h450/packet-h450-template.c859
-rw-r--r--asn1/h450/packet-h450-template.h35
4 files changed, 1237 insertions, 0 deletions
diff --git a/asn1/h450/h450.cnf b/asn1/h450/h450.cnf
new file mode 100644
index 0000000000..6678b8e500
--- /dev/null
+++ b/asn1/h450/h450.cnf
@@ -0,0 +1,23 @@
+# h4501.cnf
+# H.4501 conformation file
+# Copyright 2004 Anders Broman
+# $Id$
+
+#.MODULE_IMPORT
+H323-MESSAGES h225
+Remote-Operations-Apdus ros
+#.END
+
+#.INCLUDE ../h225/h225-exp.cnf
+#----------------------------------------------------------------------------------------
+#.FIELD_RENAME
+
+PresentedAddressScreened/presentationAllowedAddress addressScreened_presentationAllowedAddress
+PresentedNumberScreened/presentationAllowedAddress numberScreened_presentationAllowedAddress
+PresentedNumberUnscreened/presentationAllowedAddress numberUnscreened_presentationAllowedAddress
+PresentedAddressUnscreened/presentationAllowedAddress addressUnscreened_presentationAllowedAddress
+
+PresentedAddressScreened/presentationRestrictedAddress addressScreened_presentationRestrictedAddress
+PresentedNumberScreened/presentationRestrictedAddress numberScreened_presentationRestrictedAddress
+PresentedNumberUnscreened/presentationRestrictedAddress numberUnscreened_presentationRestrictedAddress
+PresentedAddressUnscreened/presentationRestrictedAddress addressUnscreened_presentationRestrictedAddress \ No newline at end of file
diff --git a/asn1/h450/h4501.asn b/asn1/h450/h4501.asn
new file mode 100644
index 0000000000..bd60bb2a0f
--- /dev/null
+++ b/asn1/h450/h4501.asn
@@ -0,0 +1,320 @@
+-- Module H4501-Supplementary-ServiceAPDU-Structure (H.450.1:02/1998)
+H4501-Supplementary-ServiceAPDU-Structure {itu-t recommendation h 450
+ 1 version1(0) h4501-facility-information-structure(2)} DEFINITIONS AUTOMATIC
+TAGS ::=
+BEGIN
+
+IMPORTS
+ AliasAddress, PartyNumber, PresentationIndicator, ScreeningIndicator, NonStandardParameter
+ FROM H323-MESSAGES -- see H.225.0 V2
+
+ OPERATION, ROS{}, InvokeId
+ FROM Remote-Operations-Apdus {itu-t recommendation h 450 1 version1(0)
+ remote-operations-apdus(11)};
+
+H4501SupplementaryService ::= SEQUENCE {
+ networkFacilityExtension NetworkFacilityExtension OPTIONAL, -- see 8.1
+ interpretationApdu InterpretationApdu OPTIONAL, -- see 8.2
+ serviceApdu ServiceApdus, -- H.450.x supplementary services
+ ...
+}
+
+NetworkFacilityExtension ::= SEQUENCE {
+ sourceEntity EntityType,
+ sourceEntityAddress AddressInformation OPTIONAL,
+ destinationEntity EntityType,
+ destinationEntityAddress AddressInformation OPTIONAL,
+ ...
+}
+
+EntityType ::= CHOICE {endpoint NULL,
+ anyEntity NULL,
+ ...
+}
+
+AddressInformation ::= AliasAddress
+
+InterpretationApdu ::= CHOICE {
+ discardAnyUnrecognizedInvokePdu NULL,
+ clearCallIfAnyInvokePduNotRecognized NULL,
+ -- this value also applies to Call independent signalling connections
+ rejectAnyUnrecognizedInvokePdu NULL,
+ -- this coding is implied by the absence of an interpretation APDU.
+ ...
+}
+
+ServiceApdus ::= CHOICE {
+ rosApdus
+ SEQUENCE OF
+ ROS{{InvokeIdSet}, {OperationSet}, {OperationSet}},
+ -- see 8.3; other alternatives may be defined in future versions
+ ...
+}
+
+
+-- actual values are defined by individual supplementary service specifications
+-- (e.g. H.450.x or manufacturer specific)
+--
+-- END of H4501- Supplementary-ServiceAPDU-Structure
+-- Imported :
+-- Module Addressing-Data-Elements (H.450.1:02/1998)
+-- Addressing-Data-Elements {itu-t recommendation h 450 1 version1(0)
+-- addressing-data-elements(9)} DEFINITIONS AUTOMATIC TAGS ::=
+PresentedAddressScreened ::= CHOICE {
+ presentationAllowedAddress AddressScreened,
+ presentationRestricted NULL,
+ numberNotAvailableDueToInterworking NULL,
+ presentationRestrictedAddress AddressScreened,
+ ...
+}
+
+PresentedAddressUnscreened ::= CHOICE {
+ presentationAllowedAddress Address,
+ presentationRestricted NULL,
+ numberNotAvailableDueToInterworking NULL,
+ presentationRestrictedAddress Address,
+ ...
+}
+
+PresentedNumberScreened ::= CHOICE {
+ presentationAllowedAddress NumberScreened,
+ presentationRestricted NULL,
+ numberNotAvailableDueToInterworking NULL,
+ presentationRestrictedAddress NumberScreened,
+ ...
+}
+
+PresentedNumberUnscreened ::= CHOICE {
+ presentationAllowedAddress PartyNumber,
+ presentationRestricted NULL,
+ numberNotAvailableDueToInterworking NULL,
+ presentationRestrictedAddress PartyNumber,
+ ...
+}
+
+AddressScreened ::= SEQUENCE {
+ partyNumber PartyNumber,
+ screeningIndicator ScreeningIndicator,
+ partySubaddress PartySubaddress OPTIONAL,
+ ...
+}
+
+NumberScreened ::= SEQUENCE {
+ partyNumber PartyNumber,
+ screeningIndicator ScreeningIndicator,
+ ...
+}
+
+Address ::= SEQUENCE {
+ partyNumber PartyNumber,
+ partySubaddress PartySubaddress OPTIONAL,
+ ...
+}
+
+-- PartyNumber defined in Recommendation H.225.0
+-- PublicPartyNumber defined in Recommendation H.225.0
+-- PrivatePartyNumber defined in Recommendation H.225.0
+-- NumberDigits defined in Recommendation H.225.0
+-- PublicTypeOfNumber defined in Recommendation H.225.0
+-- PrivateTypeOfNumber defined in Recommendation H.225.0
+-- PresentationIndicator defined in Recommendation H.225.0 (v3 and beyond)
+-- ScreeningIndicator defined in Recommendation H.225.0 (v3 and beyond)
+EndpointAddress ::= SEQUENCE {
+ destinationAddress SEQUENCE OF AliasAddress,
+ -- multiple alias addresses may be used to address the same H.323 endpoint
+ remoteExtensionAddress AliasAddress OPTIONAL,
+ ...,
+ destinationAddressPresentationIndicator
+ PresentationIndicator OPTIONAL,
+ -- Note 1, 2
+ destinationAddressScreeningIndicator ScreeningIndicator OPTIONAL,
+ remoteExtensionAddressPresentationIndicator
+ PresentationIndicator OPTIONAL,
+ -- Note 1, 2
+ remoteExtensionAddressScreeningIndicator ScreeningIndicator OPTIONAL
+}
+
+-- Note 1: If this element is not available, presentation allowed shall be assumed.
+-- Note 2: If an H.450 APDU that carries this element EndpointAddress also
+-- contains an element PresentationAllowedIndicator, then the setting of the
+-- element PresentationAllowedIndicator shall take precedence in case of
+-- conflicting presentation information.
+PartySubaddress ::= CHOICE {
+ userSpecifiedSubaddress UserSpecifiedSubaddress,
+ -- not recommended.
+ nsapSubaddress NSAPSubaddress,
+ -- according to Recommendation X.213.
+ ...
+}
+
+UserSpecifiedSubaddress ::= SEQUENCE {
+ subaddressInformation SubaddressInformation,
+ oddCountIndicator BOOLEAN OPTIONAL,
+ -- used when the coding of subaddress is BCD
+ ...
+}
+
+NSAPSubaddress ::= OCTET STRING(SIZE (1..20))
+
+-- specified according to X.213. Some networks may
+-- limit the subaddress value to some other length
+-- e.g. 4 octets
+SubaddressInformation ::= OCTET STRING(SIZE (1..20))
+
+-- coded according to user requirements. Some networks
+-- may limit the subaddress value to some other length
+-- e.g. 4 octets
+PresentationAllowedIndicator ::= BOOLEAN
+
+--END
+-- of Addressing-Data-Elements
+-- Module Call-Transfer-Operations (H.450.2:02/1998)
+-- Call-Transfer-Operations {itu-t recommendation h 450 2 version1(0)
+-- call-transfer-operations(0)} DEFINITIONS AUTOMATIC TAGS ::=
+-- Edited for ethereal purposes
+
+CallTransferIdentify ::= OCTET STRING
+
+CallTransferAbandon ::= OCTET STRING
+
+CallTransferInitiate ::= OCTET STRING
+
+CallTransferSetup ::= OCTET STRING
+
+CallTransferUpdate ::= OCTET STRING
+
+SubaddressTransfer ::= OCTET STRING
+
+CallTransferComplete ::= OCTET STRING
+
+CallTransferActive ::= OCTET STRING
+
+DummyArg ::= CHOICE {
+ extensionSeq ExtensionSeq,
+ nonStandardData NonStandardParameter
+}
+DummyRes ::= CHOICE {
+ extensionSeq ExtensionSeq,
+ nonStandardData NonStandardParameter
+}
+
+CTInitiateArg ::= SEQUENCE {
+ callIdentity CallIdentity,
+ reroutingNumber EndpointAddress,
+ argumentExtension ArgumentExtension OPTIONAL,
+ ...
+}
+ArgumentExtension ::= CHOICE {extensionSeq ExtensionSeq,
+ nonStandardData NonStandardParameter}
+
+CTSetupArg ::= SEQUENCE {
+ callIdentity CallIdentity,
+ transferringNumber EndpointAddress OPTIONAL,
+ argumentExtension ArgumentExtension OPTIONAL,
+ ...
+}
+
+CTIdentifyRes ::= SEQUENCE {
+ callIdentity CallIdentity,
+ reroutingNumber EndpointAddress,
+ resultExtension
+ CHOICE {extensionSeq ExtensionSeq,
+ nonStandardData NonStandardParameter} OPTIONAL,
+ ...
+}
+
+CTUpdateArg ::= SEQUENCE {
+ redirectionNumber EndpointAddress,
+ redirectionInfo BMPString(SIZE (1..128)) OPTIONAL,
+ basicCallInfoElements H225InformationElement OPTIONAL,
+ -- Information element
+ -- Progress indicator may be conveyed
+ argumentExtension ArgumentExtension OPTIONAL,
+ ...
+}
+
+SubaddressTransferArg ::= SEQUENCE {
+ redirectionSubaddress PartySubaddress,
+ argumentExtension ArgumentExtension OPTIONAL,
+ ...
+}
+
+CTCompleteArg ::= SEQUENCE {
+ endDesignation EndDesignation,
+ redirectionNumber EndpointAddress,
+ -- number of new connected user
+ basicCallInfoElements H225InformationElement OPTIONAL,
+ -- Information element Progress indicator may be conveyed
+ redirectionInfo BMPString(SIZE (1..128)) OPTIONAL,
+ callStatus CallStatus DEFAULT answered,
+ argumentExtension ArgumentExtension OPTIONAL,
+ ...
+}
+
+EndDesignation ::= ENUMERATED {primaryEnd(0), secondaryEnd(1), ...
+ }
+
+CallStatus ::= ENUMERATED {answered(0), alerting(1), ...
+ }
+
+CTActiveArg ::= SEQUENCE {
+ connectedAddress EndpointAddress,
+ -- number of new connected user
+ basicCallInfoElements H225InformationElement OPTIONAL,
+ -- Information element Progress indicator may be conveyed
+ connectedInfo BMPString(SIZE (1..128)) OPTIONAL,
+ argumentExtension ArgumentExtension OPTIONAL,
+ ...
+}
+
+CallIdentity ::= NumericString(SIZE (0..4))
+-- size 0 means 'empty'
+
+ExtensionSeq ::= SEQUENCE OF Extension{{ExtensionSet}}
+--
+-- Module Manufacturer-specific-service-extension-definition (H.450.1:02/1998)
+-- Manufacturer-specific-service-extension-definition {itu-t recommendation
+-- h 450 1 version1(0) msi-definition(18)} DEFINITIONS AUTOMATIC TAGS ::=
+-- BEGIN
+-- Is this correct ?
+
+
+-- Actual values defined by individual manufacturers
+Unspecified ::=
+ CHOICE {extension Extension,
+ nonStandard NonStandardParameter}
+
+-- invalidReroutingNumber ERROR ::= {
+ -- used when establishment of the new connection fails
+ -- because the reroutingNumber is not a valid alias address
+-- CODE local:1004
+-- }
+
+-- UnrecognizedCallIdentity ERROR ::= {
+ -- used when establishment of the new connection fails because it
+ -- could not be associated with a SS-CT entity at the
+ -- transferred-to endpoint
+-- CODE local:1005
+--}
+
+--establishmentFailure ERROR ::= {
+ -- used when establishment of the new connection fails and
+ -- no other error applies
+-- CODE local:1006
+--}
+
+-- END
+-- of Call-Transfer-Operations
+-- Module H225-generic-parameters-definition (H.450.1:02/1998)
+-- H225-generic-parameters-definition {itu-t recommendation h 450 1 version1(0)
+-- h225-generic-parameters(6)} DEFINITIONS AUTOMATIC TAGS ::=
+
+H225InformationElement ::= OCTET STRING
+
+--END
+-- of H225 Generic parameters definition
+
+END -- of H4501- Supplementary-ServiceAPDU-Structure
+
+-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D
+
diff --git a/asn1/h450/packet-h450-template.c b/asn1/h450/packet-h450-template.c
new file mode 100644
index 0000000000..80924130fc
--- /dev/null
+++ b/asn1/h450/packet-h450-template.c
@@ -0,0 +1,859 @@
+/* packet-h450.c
+ * Routines for h450 packet dissection
+ * Copyright 2005, Anders Broman <anders.broman@ericsson.com>
+ *
+ * $Id$
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Credit to Tomas Kukosa for developing the Asn2eth compiler.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <epan/packet.h>
+#include <epan/conversation.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "packet-h450.h"
+
+#include "packet-ber.h"
+#include "packet-per.h"
+#include "packet-h225.h"
+
+#define PNAME "h450"
+#define PSNAME "h450"
+#define PFNAME "h450"
+/* H.450.2 Call Transfer constants */
+#define CallTransferIdentify 7
+#define CallTransferAbandon 8
+#define CallTransferInitiate 9
+#define CallTransferSetup 10
+#define CallTransferUpdate 13
+#define SubaddressTransfer 14
+#define CallTransferComplete 12
+#define CallTransferActive 11
+
+/* H.450.3 Call Diversion constants */
+#define ActivateDiversionQ 15
+#define DeactivateDiversionQ 16
+#define InterrogateDiversionQ 17
+#define CheckRestriction 18
+#define CallRerouting 19
+#define DivertingLegInformation1 20
+#define DivertingLegInformation2 21
+#define DivertingLegInformation3 22
+#define DivertingLegInformation4 100
+#define CfnrDivertedLegFailed 23
+
+/* H.450.4 Call Hold constants */
+#define HoldNotific 101
+#define RetrieveNotific 102
+#define RemoteHold 103
+#define RemoteRetrieve 104
+
+/* H.450.5 Call Park and Pickup constants */
+#define CpRequest 106
+#define CpSetup 107
+#define GroupIndicationOn 108
+#define GroupIndicationOff 109
+#define Pickrequ 110
+#define Pickup 111
+#define PickExe 112
+#define CpNotify 113
+#define CpickupNotify 114
+
+/* H.450.6 Call Waiting constants */
+#define CallWaiting 105
+
+/* H.450.7 Message Waiting Indication constants */
+#define MWIActivate 80
+#define MWIDeactivate 81
+#define MWIInterrogate 82
+
+/* H.450.8 Name Identification constants */
+#define NIcallingName 0
+#define NIalertingName 1
+#define NIconnectedName 2
+#define NIbusyName 3
+
+/* H.450.9 Call Completion constants */
+#define CCBSRequest 40
+#define CCNRRequest 27
+#define CCCancel 28
+#define CCExecPossible 29
+#define CCRingout 31
+#define CCSuspend 32
+#define CCResume 33
+
+/* H.450.10 Call Offer constants */
+#define CallOfferRequest 34
+#define RemoteUserAlerting 115
+#define CFBOverride 49
+
+/* H.450.11 Call Intrusion constants */
+#define CallIntrusionRequest 43
+#define CallIntrusionGetCIPL 44
+#define CallIntrusionIsolate 45
+#define CallIntrusionForcedRelease 46
+#define CallIntrusionWOBRequest 47
+#define CallIntrusionSilentMonitor 116
+#define CallIntrusionNotification 117
+
+/* TODO - define other H.450.x constants here */
+static dissector_handle_t h4501_handle=NULL;
+
+/* Initialize the protocol and registered fields */
+static int proto_h4501 = -1;
+
+static int hf_h4501 = -1;
+static int hf_h4501_constrained_invokeId = -1;
+static int hf_h4501_invokeId = -1;
+static int hf_h4501_localOpcode = -1;
+static int hf_h4501_globalCode = -1;
+static int hf_h4501_globalargument = -1;
+static int hf_h4501_opcode = -1;
+static int hf_h4501_ReturnResult_result = -1;
+static int hf_h4501_result = -1;
+static int hf_h4501_ReturnResult = -1;
+static int hf_h4501_localErrorCode = -1;
+static int hf_h4501_errorCode = -1;
+static int hf_h4501_parameter = -1;
+static int hf_h4501_ReturnError = -1;
+static int hf_h4501_GeneralProblem = -1;
+static int hf_h4501_InvokeProblem = -1;
+static int hf_h4501_ReturnResultProblem = -1;
+static int hf_h4501_ReturnErrorProblem = -1;
+static int hf_h4501_problem = -1;
+static int hf_h4501_Reject = -1;
+
+static int hf_h4502_CTIdentifyRes = -1;
+static int hf_h4502_DummyRes = -1;
+static int hf_h4502_DummyArg = -1;
+static int hf_h4502_CTInitiateArg = -1;
+static int hf_h4502_CTSetupArg = -1;
+static int hf_h4502_CTUpdateArg = -1;
+static int hf_h4502_SubaddressTransferArg = -1;
+static int hf_h4502_CTCompleteArg = -1;
+static int hf_h4502_CTActiveArg = -1;
+
+static int hf_h4501_Invoke = -1;
+static int hf_h4501_ROS = -1;
+
+#include "packet-h450-hf.c"
+
+/* Initialize the subtree pointers */
+static gint ett_h4501 = -1;
+static gint ett_h4501_opcode = -1;
+static gint ett_h4501_result = -1;
+static gint ett_h4501_errorCode = -1;
+
+static gint ett_h4501_problem = -1;
+static gint ett_h4501_Reject = -1;
+static gint ett_h4501_ReturnError = -1;
+static gint ett_h4501_ReturnResult = -1;
+static gint ett_h4501_Invoke = -1;
+static gint ett_h4501_ROS = -1;
+
+#include "packet-h450-ett.c"
+
+/* Global variables */
+static guint32 localOpcode;
+static guint32 localErrorCode;
+static char globalcode_oid_str[256];
+static gboolean is_globalcode;
+
+static const value_string localOpcode_vals[] = {
+ /* H.450.2 Call Transfer opcodes */
+ { CallTransferIdentify, "callTransferIdentify"},
+ { CallTransferAbandon, "callTransferAbandon"},
+ { CallTransferInitiate, "callTransferInitiate"},
+ { CallTransferSetup, "callTransferSetup"},
+ { CallTransferUpdate, "callTransferUpdate"},
+ { SubaddressTransfer, "subaddressTransfer"},
+ { CallTransferComplete, "callTransferComplete"},
+ { CallTransferActive, "callTransferActive"},
+
+ /* H.450.3 Call Diversion opcodes */
+ { ActivateDiversionQ, "activateDiversionQ"},
+ { DeactivateDiversionQ, "deactivateDiversionQ"},
+ { InterrogateDiversionQ, "interrogateDiversionQ"},
+ { CheckRestriction, "checkRestriction"},
+ { CallRerouting, "callRerouting"},
+ { DivertingLegInformation1,"divertingLegInformation1"},
+ { DivertingLegInformation2,"divertingLegInformation2"},
+ { DivertingLegInformation3,"divertingLegInformation3"},
+ { DivertingLegInformation4,"divertingLegInformation4"},
+ { CfnrDivertedLegFailed, "cfnrDivertedLegFailed"},
+
+ /* H.450.4 Call Hold opcodes */
+ { HoldNotific, "holdNotific"},
+ { RetrieveNotific, "retrieveNotific"},
+ { RemoteHold, "remoteHold"},
+ { RemoteRetrieve, "remoteRetrieve"},
+
+ /* H.450.5 Call Park and Pickup opcodes */
+ { CpRequest, "cpRequest"},
+ { CpSetup, "cpSetup"},
+ { GroupIndicationOn, "groupIndicationOn"},
+ { GroupIndicationOff, "groupIndicationOff"},
+ { Pickrequ, "pickrequ"},
+ { Pickup, "pickup"},
+ { PickExe, "pickExe"},
+ { CpNotify, "cpNotify"},
+ { CpickupNotify, "cpickupNotify"},
+
+ /* H.450.6 Call Waiting opcodes */
+ { CallWaiting, "callWaiting"},
+
+ /* H.450.7 Message Waiting Indication constants */
+ { MWIActivate, "mwiActivate"},
+ { MWIDeactivate, "mwiDeactivate"},
+ { MWIInterrogate, "mwiInterrogate"},
+
+ /* H.450.8 Name Identification constants */
+ { NIcallingName, "niCallingName"},
+ { NIalertingName, "niAlertingName"},
+ { NIconnectedName, "niConnectedName"},
+ { NIbusyName, "niBusyName"},
+
+ /* H.450.9 Call Completion constants */
+ { CCBSRequest, "ccbsRequest"},
+ { CCNRRequest, "ccnrRequest"},
+ { CCCancel, "ccCancel"},
+ { CCExecPossible, "ccExecPossible"},
+ { CCRingout, "ccRingout"},
+ { CCSuspend, "ccSuspend"},
+ { CCResume, "ccResume"},
+
+ /* H.450.10 Call Offer constants */
+ { CallOfferRequest, "callOfferRequest"},
+ { RemoteUserAlerting, "remoteUserAlerting"},
+ { CFBOverride, "cfbOverride"},
+
+ /* H.450.11 Call Intrusion constants */
+ { CallIntrusionRequest, "callIntrusionRequest"},
+ { CallIntrusionGetCIPL, "callIntrusionGetCIPL"},
+ { CallIntrusionIsolate, "callIntrusionIsolate"},
+ { CallIntrusionForcedRelease,"callIntrusionForcedRelease"},
+ { CallIntrusionWOBRequest, "callIntrusionWOBRequest"},
+ { CallIntrusionSilentMonitor,"callIntrusionSilentMonitor"},
+ { CallIntrusionNotification, "callIntrusionNotification"},
+
+ /* TODO - add other H.450.x invoke opcodes here */
+
+ { 0, NULL }
+};
+
+static int dissect_h4501_argument(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree);
+static int dissect_ros_ROSxxx(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_ind _U_);
+
+static int
+dissect_xxx_Extensionxxx(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_id){
+ PER_NOT_DECODED_YET("H.450.1 ExtensionSeq");
+ return offset;
+}
+
+static int
+dissect_xxx_Extension(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_id){
+ PER_NOT_DECODED_YET("H.450.1 ExtensionSeq");
+ return offset;
+}
+
+
+#include "packet-h450-fn.c"
+
+static const value_string InvokeProblem_vals[] = {
+ { 0, "duplicateInvocation"},
+ { 1, "unrecognizedOperation"},
+ { 2, "mistypedArgument"},
+ { 3, "resourceLimitation"},
+ { 4, "releaseInProgress"},
+ { 5, "unrecognizedLinkedId"},
+ { 6, "linkedResponseUnexpected"},
+ { 7, "unexpectedLinkedOperation"},
+ { 0, NULL }
+};
+static int
+dissect_h4501_InvokeProblem(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_constrained_integer(tvb, offset, pinfo, tree, hf_h4501_InvokeProblem, 0, 7, NULL, NULL, FALSE);
+ return offset;
+}
+
+
+static const value_string ReturnResultProblem_vals[] = {
+ { 0, "unrecognizedInvocation"},
+ { 1, "resultResponseUnexpected"},
+ { 2, "mistypedResult"},
+ { 0, NULL }
+};
+static int
+dissect_h4501_ReturnResultProblem(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_constrained_integer(tvb, offset, pinfo, tree, hf_h4501_ReturnResultProblem, 0, 2, NULL, NULL, FALSE);
+ return offset;
+}
+
+
+static const value_string ReturnErrorProblem_vals[] = {
+ { 0, "unrecognizedInvocation"},
+ { 1, "errorResponseUnexpected"},
+ { 2, "unrecognizedError"},
+ { 3, "unexpectedError"},
+ { 4, "mistypedParameter"},
+ { 0, NULL }
+};
+static int
+dissect_h4501_ReturnErrorProblem(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_constrained_integer(tvb, offset, pinfo, tree, hf_h4501_ReturnErrorProblem, 0, 4, NULL, NULL, FALSE);
+ return offset;
+}
+
+static const value_string GeneralProblem_vals[] = {
+ { 0, "unrecognizedCompenent"},
+ { 1, "mistypedCompenent"},
+ { 2, "badlyStructuredCompenent"},
+ { 0, NULL }
+};
+static int
+dissect_h4501_GeneralProblem(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_constrained_integer(tvb, offset, pinfo, tree, hf_h4501_GeneralProblem, 0, 2, NULL, NULL, FALSE);
+ return offset;
+}
+static int
+dissect_h4501_ReturnResult_result(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ tvbuff_t *result_tvb;
+ guint32 result_offset=0;
+ guint32 result_len=0;
+
+ offset=dissect_per_octet_string(tvb, offset, pinfo, tree, -1, -1, -1, &result_offset, &result_len);
+
+ if(result_len){
+ result_tvb = tvb_new_subset(tvb, result_offset, result_len, result_len);
+
+ switch (localOpcode) {
+ case CallTransferIdentify:
+ dissect_h450_CTIdentifyRes(result_tvb, 0, pinfo, tree, hf_h4502_CTIdentifyRes);
+ break;
+
+ case CallTransferInitiate:
+ case CallTransferSetup:
+ dissect_h450_DummyRes(result_tvb, 0, pinfo , tree, hf_h4502_DummyRes);
+ break;
+
+ default:
+PER_NOT_DECODED_YET("Unrecognized H.450.x return result");
+ break;
+ }
+ }
+
+ return offset;
+}
+
+static int
+dissect_h4501_localOpcode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_integer(tvb, offset, pinfo, tree, hf_h4501_localOpcode, &localOpcode, NULL);
+ is_globalcode = FALSE;
+ return offset;
+}
+
+
+static int
+dissect_h4501_globalCode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_h4501_globalCode, globalcode_oid_str);
+ is_globalcode = TRUE;
+ return offset;
+}
+
+
+static const value_string opcode_vals[] = {
+ { 0, "local" },
+ { 1, "global" },
+ { 0, NULL}
+};
+static const per_choice_t opcode_choice[] = {
+ { 0, "local", ASN1_NO_EXTENSIONS,
+ dissect_h4501_localOpcode },
+ { 1, "global", ASN1_NO_EXTENSIONS,
+ dissect_h4501_globalCode },
+ { 0, NULL, 0, NULL }
+};
+static int
+dissect_h4501_opcode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h4501_opcode, ett_h4501_opcode, opcode_choice, "Opcode", NULL);
+ return offset;
+}
+
+static const per_sequence_t result_sequence[] = {
+ { "opcode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
+ dissect_h4501_opcode },
+ { "result", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
+ dissect_h4501_ReturnResult_result },
+ { NULL, 0, 0, NULL }
+};
+static int
+dissect_h4501_result(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h4501_result, ett_h4501_result, result_sequence);
+ return offset;
+}
+
+static int
+dissect_h4501_parameter(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ /* TODO - decode return error parameter based on localErrorCode */
+ offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h4501_parameter, -1, -1, NULL, NULL);
+ return offset;
+}
+static const value_string localErrorCode_vals[] = {
+ /* H.450.1 general error list */
+ { 0, "userNotSubscribed"},
+ { 1, "RejectedByNetwork"},
+ { 2, "RejectedByUser"},
+ { 3, "NotAvailable"},
+ { 5, "InsufficientInformation"},
+ { 6, "InvalidServedUserNumber"},
+ { 7, "InvalidCallState"},
+ { 8, "BasicServiceNotProvided"},
+ { 9, "NotIncomingCall"},
+ { 10, "SupplementaryServiceInteractionNotAllowed"},
+ { 11, "ResourceUnavailable"},
+ { 25, "CallFailure"},
+ { 43, "ProceduralError"},
+
+ /* H.450.2 Call Transfer return errors */
+ { 1004, "invalidReroutingNumber"},
+ { 1005, "unrecognizedCallIdentity"},
+ { 1006, "establishmentFailure"},
+ { 1008, "unspecified"},
+
+ /* H.450.4 Call Hold return errors */
+ { 2002, "undefined"},
+
+ /* H.450.5 Call Park and Pickup return errors */
+ { 2000, "callPickupIdInvalid"},
+ { 2001, "callAlreadyPickedUp"},
+
+ /* H.450.7 Message Waiting Indication return errors */
+ { 1018, "invalidMsgCentreId"},
+ { 31, "notActivated"},
+
+ /* H.450.9 Call Completion return errors */
+ { 1010, "shortTermRejection"},
+ { 1011, "longTermRejection"},
+ { 1012, "remoteUserBusyAgain"},
+ { 1013, "failureToMatch"},
+
+ /* H.450.11 Call Intrusion return errors */
+ { 1009, "notBusy"},
+ { 1000, "temporarilyUnavailable"},
+ { 1007, "notAuthorized"},
+
+ /* TODO - add other H.450.x error codes here */
+
+ { 0, NULL }
+};
+static int
+dissect_h4501_localErrorCode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_integer(tvb, offset, pinfo, tree, hf_h4501_localErrorCode, &localErrorCode, NULL);
+ return offset;
+}
+
+
+static const value_string errorCode_vals[] = {
+ { 0, "local" },
+ { 1, "global" },
+ { 0, NULL}
+};
+static const per_choice_t errorCode_choice[] = {
+ { 0, "local", ASN1_NO_EXTENSIONS,
+ dissect_h4501_localErrorCode },
+ { 1, "global", ASN1_NO_EXTENSIONS,
+ dissect_h4501_globalCode },
+ { 0, NULL, 0, NULL }
+};
+static int
+dissect_h4501_errorCode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h4501_errorCode, ett_h4501_errorCode, errorCode_choice, "errorCode", NULL);
+ return offset;
+}
+
+static const value_string problem_vals[] = {
+ { 0, "general" },
+ { 1, "invoke" },
+ { 2, "returnResult" },
+ { 3, "returnError" },
+ { 0, NULL}
+};
+static const per_choice_t problem_choice[] = {
+ { 0, "general", ASN1_NO_EXTENSIONS,
+ dissect_h4501_GeneralProblem },
+ { 1, "invoke", ASN1_NO_EXTENSIONS,
+ dissect_h4501_InvokeProblem },
+ { 2, "returnResult", ASN1_NO_EXTENSIONS,
+ dissect_h4501_ReturnResultProblem },
+ { 3, "returnError", ASN1_NO_EXTENSIONS,
+ dissect_h4501_ReturnErrorProblem },
+ { 0, NULL, 0, NULL }
+};
+static int
+dissect_h4501_problem(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h4501_problem, ett_h4501_problem, problem_choice, "problem", NULL);
+ return offset;
+}
+static int
+dissect_h4501_constrained_invokeId(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_constrained_integer(tvb, offset, pinfo, tree, hf_h4501_constrained_invokeId, 0, 65535, NULL, NULL, FALSE);
+ return offset;
+}
+
+
+static int
+dissect_h4501_invokeId(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_integer(tvb, offset, pinfo, tree, hf_h4501_invokeId, NULL, NULL);
+ return offset;
+}
+
+static const per_sequence_t Reject_sequence[] = {
+ { "invokeID", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
+ dissect_h4501_invokeId },
+ { "problem", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
+ dissect_h4501_problem },
+ { NULL, 0, 0, NULL }
+};
+static int
+dissect_h4501_Reject(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h4501_Reject, ett_h4501_Reject, Reject_sequence);
+ return offset;
+}
+
+static const per_sequence_t ReturnError_sequence[] = {
+ { "invokeID", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
+ dissect_h4501_invokeId },
+ { "errorCode", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
+ dissect_h4501_errorCode },
+ { "parameter", ASN1_NO_EXTENSIONS, ASN1_OPTIONAL,
+ dissect_h4501_parameter },
+ { NULL, 0, 0, NULL }
+};
+static int
+dissect_h4501_ReturnError(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h4501_ReturnError, ett_h4501_ReturnError, ReturnError_sequence);
+ return offset;
+}
+
+static const per_sequence_t ReturnResult_sequence[] = {
+ { "invokeID", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
+ dissect_h4501_invokeId },
+ { "result", ASN1_NO_EXTENSIONS, ASN1_OPTIONAL,
+ dissect_h4501_result },
+ { NULL, 0, 0, NULL }
+};
+static int
+dissect_h4501_ReturnResult(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h4501_ReturnResult, ett_h4501_ReturnResult, ReturnResult_sequence);
+ return offset;
+}
+
+static const per_sequence_t Invoke_sequence[] = {
+ { "invokeID", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
+ dissect_h4501_constrained_invokeId },
+ { "linkedId", ASN1_NO_EXTENSIONS, ASN1_OPTIONAL,
+ dissect_h4501_invokeId },
+ { "opcode", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
+ dissect_h4501_opcode },
+ { "argument", ASN1_NO_EXTENSIONS, ASN1_OPTIONAL,
+ dissect_h4501_argument },
+ { NULL, 0, 0, NULL }
+};
+static int
+dissect_h4501_Invoke(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h4501_Invoke, ett_h4501_Invoke, Invoke_sequence);
+ return offset;
+}
+
+static const value_string ROS_vals[] = {
+ { 1, "invoke" },
+ { 2, "returnResult" },
+ { 3, "returnError" },
+ { 4, "reject" },
+ { 0, NULL}
+};
+static const per_choice_t ROS_choice[] = {
+ { 1, "invoke", ASN1_NO_EXTENSIONS,
+ dissect_h4501_Invoke },
+ { 2, "returnResult", ASN1_NO_EXTENSIONS,
+ dissect_h4501_ReturnResult },
+ { 3, "returnError", ASN1_NO_EXTENSIONS,
+ dissect_h4501_ReturnError },
+ { 4, "reject", ASN1_NO_EXTENSIONS,
+ dissect_h4501_Reject },
+ { 0, NULL, 0, NULL }
+};
+static int
+dissect_h4501_ROS(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h4501_ROS, ett_h4501_ROS, ROS_choice, "ROS", NULL);
+ return offset;
+}
+
+static int
+dissect_h4501_argument(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+{
+ tvbuff_t *argument_tvb;
+ guint32 argument_offset=0;
+ guint32 argument_len=0;
+
+ if ( is_globalcode ){
+ /* TODO call oid dissector
+ * call_ber_oid_callback isn't realy apropriate ?
+ */
+ offset = dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h4501_globalargument, -1, -1, NULL, NULL);
+ is_globalcode = FALSE;
+ return offset;
+
+ }
+
+ offset=dissect_per_octet_string(tvb, offset, pinfo, tree, -1, -1, -1, &argument_offset, &argument_len);
+
+ if(argument_len){
+ argument_tvb = tvb_new_subset(tvb, argument_offset, argument_len, argument_len);
+
+
+ switch (localOpcode) {
+ case CallTransferIdentify:
+ case CallTransferAbandon:
+ dissect_h450_DummyArg(argument_tvb, 0, pinfo , tree, hf_h4502_DummyArg);
+ break;
+
+ case CallTransferInitiate:
+ dissect_h450_CTInitiateArg(argument_tvb, 0, pinfo , tree, hf_h4502_CTInitiateArg);
+ break;
+
+ case CallTransferSetup:
+ dissect_h450_CTSetupArg(argument_tvb, 0, pinfo , tree, hf_h4502_CTSetupArg);
+ break;
+
+ case CallTransferUpdate:
+ dissect_h450_CTUpdateArg(argument_tvb, 0, pinfo , tree, hf_h4502_CTUpdateArg);
+ break;
+
+ case SubaddressTransfer:
+ dissect_h450_SubaddressTransferArg(argument_tvb, 0, pinfo , tree, hf_h4502_SubaddressTransferArg);
+ break;
+
+ case CallTransferComplete:
+ dissect_h450_CTCompleteArg(argument_tvb, 0, pinfo , tree, hf_h4502_CTCompleteArg);
+ break;
+
+ case CallTransferActive:
+ dissect_h450_CTActiveArg(argument_tvb, 0, pinfo , tree, hf_h4502_CTActiveArg);
+ break;
+
+ /* TODO - decode other H.450.x invoke arguments here */
+ default:
+PER_NOT_DECODED_YET("Unrecognized H.450.x operation");
+ break;
+ }
+ }
+ return offset;
+}
+static int
+dissect_ros_ROSxxx(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_ind _U_){
+
+ offset = dissect_h4501_ROS(tvb, offset, pinfo, tree);
+ return offset;
+
+}
+static int
+dissect_h4501(tvbuff_t *tvb, packet_info *pinfo, proto_tree* tree)
+{
+ proto_item *it;
+ proto_tree *tr;
+ guint32 offset=0;
+
+ it=proto_tree_add_protocol_format(tree, proto_h4501, tvb, 0, tvb_length(tvb), "H.450.1");
+ tr=proto_item_add_subtree(it, ett_h4501);
+
+ dissect_h450_H4501SupplementaryService(tvb, offset, pinfo, tr, hf_h4501);
+ return offset;
+
+}
+
+/*--- proto_register_h450 -------------------------------------------*/
+void proto_register_h450(void) {
+
+ /* List of fields */
+ static hf_register_info hf[] = {
+ { &hf_h4501,
+ { "SupplementaryService", "h4501.SupplementaryService", FT_NONE, BASE_NONE,
+ NULL, 0, "SupplementaryService sequence", HFILL }},
+ { &hf_h4501_constrained_invokeId,
+ { "invokeId", "h4501.invokeId", FT_UINT32, BASE_DEC,
+ NULL, 0, "invokeId", HFILL }},
+ { &hf_h4501_invokeId,
+ { "invokeId", "h4501.invokeId", FT_INT32, BASE_DEC,
+ NULL, 0, "invokeId", HFILL }},
+ { &hf_h4501_localOpcode,
+ { "opcode", "h4501.opcode", FT_INT32, BASE_DEC,
+ VALS(localOpcode_vals), 0, "local", HFILL }},
+ { &hf_h4501_globalCode,
+ { "global", "h4501.global", FT_STRING, BASE_HEX,
+ NULL, 0, "global", HFILL }},
+ { &hf_h4501_globalargument,
+ { "argument", "h4501.argument", FT_BYTES, BASE_HEX,
+ NULL, 0, "argument", HFILL }},
+ { &hf_h4501_opcode,
+ { "opcode", "h4501.opcode", FT_UINT32, BASE_DEC,
+ VALS(opcode_vals), 0, "opcode choice", HFILL }},
+ { &hf_h4501_ReturnResult_result,
+ { "result", "h4501.ReturnResult.result", FT_BYTES, BASE_HEX,
+ NULL, 0, "result", HFILL }},
+ { &hf_h4501_result,
+ { "result", "h4501.result", FT_NONE, BASE_NONE,
+ NULL, 0, "result sequence of", HFILL }},
+ { &hf_h4501_ReturnResult,
+ { "ReturnResult", "h4501.ReturnResult", FT_NONE, BASE_NONE,
+ NULL, 0, "ReturnResult sequence of", HFILL }},
+ { &hf_h4501_localErrorCode,
+ { "errorCode", "h4501.errorCode", FT_INT32, BASE_DEC,
+ VALS(localErrorCode_vals), 0, "local", HFILL }},
+ { &hf_h4501_errorCode,
+ { "errorCode", "h4501.errorCode", FT_UINT32, BASE_DEC,
+ VALS(errorCode_vals), 0, "errorCode", HFILL }},
+ { &hf_h4501_parameter,
+ { "parameter", "h4501.parameter", FT_BYTES, BASE_HEX,
+ NULL, 0, "parameter", HFILL }},
+ { &hf_h4501_ReturnError,
+ { "ReturnError", "h4501.ReturnError", FT_NONE, BASE_NONE,
+ NULL, 0, "ReturnError sequence of", HFILL }},
+ { &hf_h4501_GeneralProblem,
+ { "GeneralProblem", "h4501.GeneralProblem", FT_UINT32, BASE_DEC,
+ VALS(GeneralProblem_vals), 0, "GeneralProblem", HFILL }},
+ { &hf_h4501_InvokeProblem,
+ { "InvokeProblem", "h4501.InvokeProblem", FT_UINT32, BASE_DEC,
+ VALS(InvokeProblem_vals), 0, "InvokeProblem", HFILL }},
+ { &hf_h4501_ReturnResultProblem,
+ { "ReturnResultProblem", "h4501.ReturnResultProblem", FT_UINT32, BASE_DEC,
+ VALS(ReturnResultProblem_vals), 0, "ReturnResultProblem", HFILL }},
+ { &hf_h4501_ReturnErrorProblem,
+ { "ReturnErrorProblem", "h4501.ReturnErrorProblem", FT_UINT32, BASE_DEC,
+ VALS(ReturnErrorProblem_vals), 0, "ReturnErrorProblem", HFILL }},
+ { &hf_h4501_problem,
+ { "problem", "h4501.problem", FT_UINT32, BASE_DEC,
+ VALS(problem_vals), 0, "problem choice", HFILL }},
+ { &hf_h4501_Reject,
+ { "Reject", "h4501.Reject", FT_NONE, BASE_NONE,
+ NULL, 0, "Reject sequence of", HFILL }},
+ { &hf_h4501_ROS,
+ { "ROS", "h4501.ROS", FT_UINT32, BASE_DEC,
+ VALS(ROS_vals), 0, "ROS choice", HFILL }},
+ { &hf_h4501_Invoke,
+ { "Invoke", "h4501.Invoke", FT_NONE, BASE_NONE,
+ NULL, 0, "Invoke sequence of", HFILL }},
+
+ { &hf_h4502_CTIdentifyRes,
+ { "CTIdentifyRes", "h4502.CTIdentifyRes", FT_NONE, BASE_NONE,
+ NULL, 0, "CTIdentifyRes sequence of", HFILL }},
+ { &hf_h4502_DummyRes,
+ { "DummyRes", "h4502.DummyRes", FT_UINT32, BASE_DEC,
+ VALS(h450_DummyRes_vals), 0, "DummyRes Choice", HFILL }},
+ { &hf_h4502_DummyArg,
+ { "DummyArg", "h4502.DummyArg", FT_UINT32, BASE_DEC,
+ VALS(h450_DummyArg_vals), 0, "DummyArg choice", HFILL }},
+ { &hf_h4502_CTInitiateArg,
+ { "CTInitiateArg", "h4502.CTInitiateArg", FT_NONE, BASE_NONE,
+ NULL, 0, "CTInitiateArg sequence of", HFILL }},
+ { &hf_h4502_CTSetupArg,
+ { "CTSetupArg", "h4502.CTSetupArg", FT_NONE, BASE_NONE,
+ NULL, 0, "CTSetupArg sequence of", HFILL }},
+ { &hf_h4502_CTUpdateArg,
+ { "CTUpdateArg", "h4502.CTUpdateArg", FT_NONE, BASE_NONE,
+ NULL, 0, "CTUpdateArg sequence of", HFILL }},
+ { &hf_h4502_SubaddressTransferArg,
+ { "SubaddressTransferArg", "h4502.SubaddressTransferArg", FT_NONE, BASE_NONE,
+ NULL, 0, "SubaddressTransferArg sequence of", HFILL }},
+
+#include "packet-h450-hfarr.c"
+ };
+
+ /* List of subtrees */
+ static gint *ett[] = {
+ &ett_h4501,
+ &ett_h4501_opcode,
+ &ett_h4501_result,
+ &ett_h4501_errorCode,
+
+ &ett_h4501_problem,
+ &ett_h4501_Reject,
+ &ett_h4501_ReturnError,
+ &ett_h4501_ReturnResult,
+ &ett_h4501_Invoke,
+ &ett_h4501_ROS,
+#include "packet-h450-ettarr.c"
+ };
+
+
+ /* Register protocol */
+ proto_h4501 = proto_register_protocol(PNAME, PSNAME, PFNAME);
+ /* Register fields and subtrees */
+ proto_register_field_array(proto_h4501, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+
+
+ register_dissector("h4501", dissect_h4501, proto_h4501);
+
+
+}
+
+
+/*--- proto_reg_handoff_h4501 ---------------------------------------*/
+void
+proto_reg_handoff_h4501(void)
+{
+
+ h4501_handle = find_dissector("h4501");
+
+}
+
+
+
+
diff --git a/asn1/h450/packet-h450-template.h b/asn1/h450/packet-h450-template.h
new file mode 100644
index 0000000000..b6b309bc28
--- /dev/null
+++ b/asn1/h450/packet-h450-template.h
@@ -0,0 +1,35 @@
+/* packet-h450.h
+ * Routines for h450 packet dissection
+ * Copyright 2005, Anders Broman <anders.broman@ericsson.com>
+ *
+ * $Id: packet-h450-template.h 12203 2004-10-05 09:18:55Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PACKET_H450_H
+#define PACKET_H450_H
+
+
+
+/*#include "packet-H450-exp.h" */
+
+#endif /* PACKET_H450_H */
+
+