diff --git a/epan/dissectors/packet-h225.c b/epan/dissectors/packet-h225.c index 04bc9114ac..a293452912 100644 --- a/epan/dissectors/packet-h225.c +++ b/epan/dissectors/packet-h225.c @@ -1,6 +1,6 @@ /* Do not modify this file. */ /* It is created automatically by the ASN.1 to Ethereal dissector compiler */ -/* ./packet-h225.c */ +/* .\packet-h225.c */ /* ../../tools/asn2eth.py -X -e -p h225 -c h225.cnf -s packet-h225-template h225.asn */ /* Input file: packet-h225-template.c */ @@ -60,6 +60,7 @@ #include "packet-ber.h" #include "packet-h235.h" #include "packet-h245.h" +#include "packet-q931.h" #define PNAME "h225" #define PSNAME "H225" @@ -124,7 +125,7 @@ static int hf_h225_setupAcknowledge = -1; /* SetupAcknowledge_UUIE */ static int hf_h225_notify = -1; /* Notify_UUIE */ static int hf_h225_nonStandardData = -1; /* NonStandardParameter */ static int hf_h225_h4501SupplementaryService = -1; /* SEQUNCE_OF_OCTET_STRING */ -static int hf_h225_h4501SupplementaryService_item = -1; /* OCTET_STRING */ +static int hf_h225_h4501SupplementaryService_item = -1; /* T_h4501SupplementaryService_item */ static int hf_h225_h245Tunneling = -1; /* BOOLEAN */ static int hf_h225_h245Control = -1; /* H245Control */ static int hf_h225_nonStandardControl = -1; /* SEQUNCE_OF_NonStandardParameter */ @@ -2119,9 +2120,6 @@ dissect_h225_OCTET_STRING(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, pro return offset; } -static int dissect_h4501SupplementaryService_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { - return dissect_h225_OCTET_STRING(tvb, offset, pinfo, tree, hf_h225_h4501SupplementaryService_item); -} static int dissect_messageContent_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { return dissect_h225_OCTET_STRING(tvb, offset, pinfo, tree, hf_h225_messageContent_item); } @@ -5851,6 +5849,27 @@ static int dissect_h323_message_body(tvbuff_t *tvb, int offset, packet_info *pin } +static int +dissect_h225_T_h4501SupplementaryService_item(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + + tvbuff_t *h4501_tvb; + guint32 h4501_offset=0; + guint32 h4501_len=0; + + offset=dissect_per_octet_string(tvb, offset, pinfo, tree, -1, -1, -1, &h4501_offset, &h4501_len); + + if(h4501_len){ + h4501_tvb = tvb_new_subset(tvb, h4501_offset, h4501_len, h4501_len); + call_dissector(h4501_handle, h4501_tvb, pinfo, tree); + } + + return offset; +} +static int dissect_h4501SupplementaryService_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h225_T_h4501SupplementaryService_item(tvb, offset, pinfo, tree, hf_h225_h4501SupplementaryService_item); +} + + static int dissect_h225_SEQUNCE_OF_OCTET_STRING(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { offset = dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_index, @@ -6290,7 +6309,6 @@ dissect_h225_RequestSeqNum(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, pr 1U, 65535U, &(h225_pi.requestSeqNum), NULL, FALSE); - return offset; } static int dissect_requestSeqNum(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { @@ -8785,7 +8803,7 @@ void proto_register_h225(void) { "H323-UserInformation/user-data", HFILL }}, { &hf_h225_protocol_discriminator, { "protocol-discriminator", "h225.protocol_discriminator", - FT_UINT32, BASE_DEC, NULL, 0, + FT_UINT32, BASE_DEC, VALS(q931_protocol_discriminator_vals), 0, "H323-UserInformation/user-data/protocol-discriminator", HFILL }}, { &hf_h225_user_information, { "user-information", "h225.user_information", diff --git a/epan/dissectors/packet-h225.h b/epan/dissectors/packet-h225.h index bbcae4b87d..e8b3707b46 100644 --- a/epan/dissectors/packet-h225.h +++ b/epan/dissectors/packet-h225.h @@ -1,6 +1,6 @@ /* Do not modify this file. */ /* It is created automatically by the ASN.1 to Ethereal dissector compiler */ -/* ./packet-h225.h */ +/* .\packet-h225.h */ /* ../../tools/asn2eth.py -X -e -p h225 -c h225.cnf -s packet-h225-template h225.asn */ /* Input file: packet-h225-template.h */ diff --git a/epan/dissectors/packet-h450.c b/epan/dissectors/packet-h450.c index edab6fd4bc..68549043ad 100644 --- a/epan/dissectors/packet-h450.c +++ b/epan/dissectors/packet-h450.c @@ -1,8 +1,15 @@ +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Ethereal dissector compiler */ +/* .\packet-h450.c */ +/* ../../tools/asn2eth.py -X -e -p h450 -c h450.cnf -s packet-h450-template h4501.asn */ + +/* Input file: packet-h450-template.c */ + /* packet-h450.c - * Routines for H.450 packet dissection + * Routines for h450 packet dissection + * Based on the previous h450 dissector by: * 2003 Graeme Reid (graeme.reid@norwoodsystems.com) - * - * Copied from packet-h225.c and packet-h245.c + * Copyright 2005, Anders Broman * * $Id$ * @@ -23,6 +30,9 @@ * 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 @@ -36,11 +46,15 @@ #include #include -#include +#include "packet-h450.h" + +#include "packet-ber.h" #include "packet-per.h" #include "packet-h225.h" -#include "packet-h245.h" +#define PNAME "h450" +#define PSNAME "h450" +#define PFNAME "h450" /* H.450.2 Call Transfer constants */ #define CallTransferIdentify 7 #define CallTransferAbandon 8 @@ -118,32 +132,18 @@ #define CallIntrusionNotification 117 /* TODO - define other H.450.x constants here */ +static dissector_handle_t h4501_handle=NULL; -static dissector_handle_t h4501_handle; - +/* Initialize the protocol and registered fields */ static int proto_h4501 = -1; static int hf_h4501 = -1; -static int hf_h4501_EntityType = -1; -static int hf_h4501_NetworkFacilityExtension = -1; -static int hf_h4501_InterpretationApdu = -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_destinationAddress = -1; -static int hf_h4501_EndpointAddress = -1; -static int hf_h4501_H225InformationElement = -1; -static int hf_h4501_SubaddressInformation = -1; -static int hf_h4501_oddCountIndicator = -1; -static int hf_h4501_UserSpecifiedSubaddress = -1; -static int hf_h4501_NSAPAddress = -1; -static int hf_h4501_PartySubaddress = -1; -static int hf_h4501_argumentExtension = -1; -static int hf_h4501_argument = -1; -static int hf_h4501_Invoke = -1; -static int hf_h4501_resultExtension = -1; static int hf_h4501_ReturnResult_result = -1; static int hf_h4501_result = -1; static int hf_h4501_ReturnResult = -1; @@ -157,145 +157,203 @@ 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_h4501_ROS = -1; -static int hf_h4501_rosApdus = -1; -static int hf_h4501_ServiceApdus = -1; -static int hf_h4502_nonStandardData = -1; -static int hf_h4502_DummyArg = -1; -static int hf_h4502_CallIdentity = -1; -static int hf_h4502_CTInitiateArg = -1; -static int hf_h4502_CTSetupArg = -1; -static int hf_h4502_redirectionInfo = -1; -static int hf_h4502_CTUpdateArg = -1; -static int hf_h4502_SubaddressTransferArg = -1; -static int hf_h4502_EndDesignation = -1; -static int hf_h4502_CallStatus = -1; -static int hf_h4502_CTCompleteArg = -1; -static int hf_h4502_connectedInfo = -1; -static int hf_h4502_CTActiveArg = -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_h4504_HoldNotificArg = -1; +static int hf_h4504_RetrieveNotificArg = -1; +static int hf_h4504_RemoteHoldArg = -1; +static int hf_h4504_RemoteRetrieveArg = -1; +static int hf_h4504_RemoteRetrieveRes = -1; + +static int hf_h4507_MWIActivateArg = -1; +static int hf_h4507_MWIDeactivateArg = -1; +static int hf_h4507_MwiDummyRes = -1; +static int hf_h4507_MWIInterrogateArg = -1; +static int hf_h4507_MWIInterrogateRes = -1; + +static int hf_h4508_CallingNameArg = -1; +static int hf_h4508_AlertingNameArg = -1; +static int hf_h4508_ConnectedNameArg = -1; +static int hf_h4508_BusyNameArg = -1; + +static int hf_h4501_Invoke = -1; +static int hf_h4501_ROS = -1; + + +/*--- Included file: packet-h450-hf.c ---*/ + +static int hf_h450_networkFacilityExtension = -1; /* NetworkFacilityExtension */ +static int hf_h450_interpretationApdu = -1; /* InterpretationApdu */ +static int hf_h450_serviceApdu = -1; /* ServiceApdus */ +static int hf_h450_sourceEntity = -1; /* EntityType */ +static int hf_h450_sourceEntityAddress = -1; /* AddressInformation */ +static int hf_h450_destinationEntity = -1; /* EntityType */ +static int hf_h450_destinationEntityAddress = -1; /* AddressInformation */ +static int hf_h450_endpoint = -1; /* NULL */ +static int hf_h450_anyEntity = -1; /* NULL */ +static int hf_h450_discardAnyUnrecognizedInvokePdu = -1; /* NULL */ +static int hf_h450_clearCallIfAnyInvokePduNotRecognized = -1; /* NULL */ +static int hf_h450_rejectAnyUnrecognizedInvokePdu = -1; /* NULL */ +static int hf_h450_rosApdus = -1; /* SEQUNCE_OF_ROSxxx */ +static int hf_h450_rosApdus_item = -1; /* ROSxxx */ +static int hf_h450_addressScreened_presentationAllowedAddress = -1; /* AddressScreened */ +static int hf_h450_presentationRestricted = -1; /* NULL */ +static int hf_h450_numberNotAvailableDueToInterworking = -1; /* NULL */ +static int hf_h450_addressScreened_presentationRestrictedAddress = -1; /* AddressScreened */ +static int hf_h450_addressUnscreened_presentationAllowedAddress = -1; /* Address */ +static int hf_h450_addressUnscreened_presentationRestrictedAddress = -1; /* Address */ +static int hf_h450_numberScreened_presentationAllowedAddress = -1; /* NumberScreened */ +static int hf_h450_numberScreened_presentationRestrictedAddress = -1; /* NumberScreened */ +static int hf_h450_numberUnscreened_presentationAllowedAddress = -1; /* PartyNumber */ +static int hf_h450_numberUnscreened_presentationRestrictedAddress = -1; /* PartyNumber */ +static int hf_h450_partyNumber = -1; /* PartyNumber */ +static int hf_h450_screeningIndicator = -1; /* ScreeningIndicator */ +static int hf_h450_partySubaddress = -1; /* PartySubaddress */ +static int hf_h450_destinationAddress = -1; /* SEQUNCE_OF_AliasAddress */ +static int hf_h450_destinationAddress_item = -1; /* AliasAddress */ +static int hf_h450_remoteExtensionAddress = -1; /* AliasAddress */ +static int hf_h450_destinationAddressPresentationIndicator = -1; /* PresentationIndicator */ +static int hf_h450_destinationAddressScreeningIndicator = -1; /* ScreeningIndicator */ +static int hf_h450_remoteExtensionAddressPresentationIndicator = -1; /* PresentationIndicator */ +static int hf_h450_remoteExtensionAddressScreeningIndicator = -1; /* ScreeningIndicator */ +static int hf_h450_userSpecifiedSubaddress = -1; /* UserSpecifiedSubaddress */ +static int hf_h450_nsapSubaddress = -1; /* NSAPSubaddress */ +static int hf_h450_subaddressInformation = -1; /* SubaddressInformation */ +static int hf_h450_oddCountIndicator = -1; /* BOOLEAN */ +static int hf_h450_extensionSeq = -1; /* ExtensionSeq */ +static int hf_h450_nonStandardData = -1; /* NonStandardParameter */ +static int hf_h450_callIdentity = -1; /* CallIdentity */ +static int hf_h450_reroutingNumber = -1; /* EndpointAddress */ +static int hf_h450_argumentExtension = -1; /* ArgumentExtension */ +static int hf_h450_transferringNumber = -1; /* EndpointAddress */ +static int hf_h450_resultExtension = -1; /* T_resultExtension */ +static int hf_h450_redirectionNumber = -1; /* EndpointAddress */ +static int hf_h450_redirectionInfo = -1; /* BMPString_SIZE_1_128 */ +static int hf_h450_basicCallInfoElements = -1; /* H225InformationElement */ +static int hf_h450_redirectionSubaddress = -1; /* PartySubaddress */ +static int hf_h450_endDesignation = -1; /* EndDesignation */ +static int hf_h450_callStatus = -1; /* CallStatus */ +static int hf_h450_connectedAddress = -1; /* EndpointAddress */ +static int hf_h450_connectedInfo = -1; /* BMPString_SIZE_1_128 */ +static int hf_h450_ExtensionSeq_item = -1; /* Extensionxxx */ +static int hf_h450_extensionArg = -1; /* ExtensionArg */ +static int hf_h450_ExtensionArg_item = -1; /* MixedExtension */ +static int hf_h450_extensionRes = -1; /* SEQUNCE_SIZE_0_255_OF_MixedExtension */ +static int hf_h450_extensionRes_item = -1; /* MixedExtension */ +static int hf_h450_extension = -1; /* Extensionxxx */ +static int hf_h450_servedUserNr = -1; /* EndpointAddress */ +static int hf_h450_basicService = -1; /* BasicService */ +static int hf_h450_msgCentreId = -1; /* MsgCentreId */ +static int hf_h450_nbOfMessages = -1; /* NbOfMessages */ +static int hf_h450_originatingNr = -1; /* EndpointAddress */ +static int hf_h450_timestamp = -1; /* TimeStamp */ +static int hf_h450_priority = -1; /* INTEGER_0_9 */ +static int hf_h450_MwiDummyRes_item = -1; /* MixedExtension */ +static int hf_h450_callbackReq = -1; /* BOOLEAN */ +static int hf_h450_MWIInterrogateRes_item = -1; /* MWIInterrogateResElt */ +static int hf_h450_integer = -1; /* INTEGER_0_65535 */ +static int hf_h450_mwipartyNumber = -1; /* EndpointAddress */ +static int hf_h450_numericString = -1; /* NumericString_SIZE_1_10 */ +static int hf_h450_name = -1; /* Name */ +static int hf_h450_namePresentationAllowed = -1; /* NamePresentationAllowed */ +static int hf_h450_namePresentationRestricted = -1; /* NamePresentationRestricted */ +static int hf_h450_nameNotAvailable = -1; /* NULL */ +static int hf_h450_simpleName = -1; /* SimpleName */ +static int hf_h450_extendedName = -1; /* ExtendedName */ +static int hf_h450_restrictedNull = -1; /* NULL */ +static int hf_h450_extension1 = -1; /* Extension */ +static int hf_h450_nonStandard = -1; /* NonStandardParameter */ + +/*--- End of included file: packet-h450-hf.c ---*/ + + +/* Initialize the subtree pointers */ static gint ett_h4501 = -1; -static gint ett_h4501_EntityType = -1; -static gint ett_h4501_NetworkFacilityExtension = -1; -static gint ett_h4501_InterpretationApdu = -1; static gint ett_h4501_opcode = -1; -static gint ett_h4501_destinationAddress = -1; -static gint ett_h4501_EndpointAddress = -1; -static gint ett_h4501_UserSpecifiedSubaddress = -1; -static gint ett_h4501_PartySubaddress = -1; -static gint ett_h4501_argumentExtension = -1; -static gint ett_h4501_Invoke = -1; -static gint ett_h4501_resultExtension = -1; static gint ett_h4501_result = -1; -static gint ett_h4501_ReturnResult = -1; static gint ett_h4501_errorCode = -1; -static gint ett_h4501_ReturnError = -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; -static gint ett_h4501_rosApdus = -1; -static gint ett_h4501_ServiceApdus = -1; -static gint ett_h4502_DummyArg = -1; -static gint ett_h4502_CTInitiateArg = -1; -static gint ett_h4502_CTSetupArg = -1; -static gint ett_h4502_CTUpdateArg = -1; -static gint ett_h4502_SubaddressTransferArg = -1; -static gint ett_h4502_CTCompleteArg = -1; -static gint ett_h4502_CTActiveArg = -1; -static gint ett_h4502_CTIdentifyRes = -1; -static gint ett_h4502_DummyRes = -1; +/*--- Included file: packet-h450-ett.c ---*/ + +static gint ett_h450_H4501SupplementaryService = -1; +static gint ett_h450_NetworkFacilityExtension = -1; +static gint ett_h450_EntityType = -1; +static gint ett_h450_InterpretationApdu = -1; +static gint ett_h450_ServiceApdus = -1; +static gint ett_h450_SEQUNCE_OF_ROSxxx = -1; +static gint ett_h450_PresentedAddressScreened = -1; +static gint ett_h450_PresentedAddressUnscreened = -1; +static gint ett_h450_PresentedNumberScreened = -1; +static gint ett_h450_PresentedNumberUnscreened = -1; +static gint ett_h450_AddressScreened = -1; +static gint ett_h450_NumberScreened = -1; +static gint ett_h450_Address = -1; +static gint ett_h450_EndpointAddress = -1; +static gint ett_h450_SEQUNCE_OF_AliasAddress = -1; +static gint ett_h450_PartySubaddress = -1; +static gint ett_h450_UserSpecifiedSubaddress = -1; +static gint ett_h450_DummyArg = -1; +static gint ett_h450_DummyRes = -1; +static gint ett_h450_CTInitiateArg = -1; +static gint ett_h450_ArgumentExtension = -1; +static gint ett_h450_CTSetupArg = -1; +static gint ett_h450_CTIdentifyRes = -1; +static gint ett_h450_T_resultExtension = -1; +static gint ett_h450_CTUpdateArg = -1; +static gint ett_h450_SubaddressTransferArg = -1; +static gint ett_h450_CTCompleteArg = -1; +static gint ett_h450_CTActiveArg = -1; +static gint ett_h450_ExtensionSeq = -1; +static gint ett_h450_HoldNotificArg = -1; +static gint ett_h450_ExtensionArg = -1; +static gint ett_h450_RetrieveNotificArg = -1; +static gint ett_h450_RemoteHoldArg = -1; +static gint ett_h450_RemoteHoldRes = -1; +static gint ett_h450_SEQUNCE_SIZE_0_255_OF_MixedExtension = -1; +static gint ett_h450_RemoteRetrieveArg = -1; +static gint ett_h450_RemoteRetrieveRes = -1; +static gint ett_h450_MixedExtension = -1; +static gint ett_h450_MWIActivateArg = -1; +static gint ett_h450_MwiDummyRes = -1; +static gint ett_h450_MWIDeactivateArg = -1; +static gint ett_h450_MWIInterrogateArg = -1; +static gint ett_h450_MWIInterrogateRes = -1; +static gint ett_h450_MWIInterrogateResElt = -1; +static gint ett_h450_MsgCentreId = -1; +static gint ett_h450_CallingName = -1; +static gint ett_h450_AlertingName = -1; +static gint ett_h450_ConnectedName = -1; +static gint ett_h450_BusyName = -1; +static gint ett_h450_Name = -1; +static gint ett_h450_NamePresentationAllowed = -1; +static gint ett_h450_NamePresentationRestricted = -1; +static gint ett_h450_Unspecified = -1; + +/*--- End of included file: packet-h450-ett.c ---*/ + + +/* Global variables */ static guint32 localOpcode; static guint32 localErrorCode; - -static int -dissect_h4501_NULL(tvbuff_t *tvb _U_, int offset, packet_info *pinfo _U_, proto_tree *tree _U_) -{ - return offset; -} - - -static const value_string EntityType_vals[] = { - { 0, "endpoint" }, - { 1, "anyEntity" }, - { 0, NULL} -}; -static const per_choice_t EntityType_choice[] = { - { 0, "endpoint", ASN1_EXTENSION_ROOT, - dissect_h4501_NULL }, - { 1, "anyEntity", ASN1_EXTENSION_ROOT, - dissect_h4501_NULL }, - { 0, NULL, 0, NULL } -}; -static int -dissect_h4501_EntityType(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h4501_EntityType, ett_h4501_EntityType, EntityType_choice, "EntityType", NULL); - return offset; -} - - -static const per_sequence_t NetworkFacilityExtension_sequence[] = { - { "sourceEntity", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, - dissect_h4501_EntityType }, - { "sourceEntityAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h225_AliasAddress }, - { "destinationEntity", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, - dissect_h4501_EntityType }, - { "destinationEntityAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h225_AliasAddress }, - { NULL, 0, 0, NULL } -}; -static int -dissect_h4501_NetworkFacilityExtension(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h4501_NetworkFacilityExtension, ett_h4501_NetworkFacilityExtension, NetworkFacilityExtension_sequence); - return offset; -} - - -static const value_string InterpretationApdu_vals[] = { - { 0, "discardAnyUnrecognizedInvokePdu" }, - { 1, "clearCallIfAnyInvokePduNotRecognized" }, - { 2, "rejectAnyUnrecognizedInvokePdu" }, - { 0, NULL} -}; -static const per_choice_t InterpretationApdu_choice[] = { - { 0, "discardAnyUnrecognizedInvokePdu", ASN1_EXTENSION_ROOT, - dissect_h4501_NULL }, - { 1, "clearCallIfAnyInvokePduNotRecognized", ASN1_EXTENSION_ROOT, - dissect_h4501_NULL }, - { 2, "rejectAnyUnrecognizedInvokePdu", ASN1_EXTENSION_ROOT, - dissect_h4501_NULL }, - { 0, NULL, 0, NULL } -}; -static int -dissect_h4501_InterpretationApdu(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h4501_InterpretationApdu, ett_h4501_InterpretationApdu, InterpretationApdu_choice, "InterpretationApdu", 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 char globalcode_oid_str[256]; +static gboolean is_globalcode; static const value_string localOpcode_vals[] = { /* H.450.2 Call Transfer opcodes */ @@ -378,10 +436,1659 @@ static const value_string localOpcode_vals[] = { { 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; +} + + + +/*--- Included file: packet-h450-fn.c ---*/ + +/*--- Fields for imported types ---*/ + +static int dissect_rosApdus_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_ros_ROSxxx(tvb, offset, pinfo, tree, hf_h450_rosApdus_item); +} +static int dissect_numberUnscreened_presentationAllowedAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h225_PartyNumber(tvb, offset, pinfo, tree, hf_h450_numberUnscreened_presentationAllowedAddress); +} +static int dissect_numberUnscreened_presentationRestrictedAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h225_PartyNumber(tvb, offset, pinfo, tree, hf_h450_numberUnscreened_presentationRestrictedAddress); +} +static int dissect_partyNumber(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h225_PartyNumber(tvb, offset, pinfo, tree, hf_h450_partyNumber); +} +static int dissect_screeningIndicator(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h225_ScreeningIndicator(tvb, offset, pinfo, tree, hf_h450_screeningIndicator); +} +static int dissect_destinationAddress_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h225_AliasAddress(tvb, offset, pinfo, tree, hf_h450_destinationAddress_item); +} +static int dissect_remoteExtensionAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h225_AliasAddress(tvb, offset, pinfo, tree, hf_h450_remoteExtensionAddress); +} +static int dissect_destinationAddressPresentationIndicator(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h225_PresentationIndicator(tvb, offset, pinfo, tree, hf_h450_destinationAddressPresentationIndicator); +} +static int dissect_destinationAddressScreeningIndicator(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h225_ScreeningIndicator(tvb, offset, pinfo, tree, hf_h450_destinationAddressScreeningIndicator); +} +static int dissect_remoteExtensionAddressPresentationIndicator(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h225_PresentationIndicator(tvb, offset, pinfo, tree, hf_h450_remoteExtensionAddressPresentationIndicator); +} +static int dissect_remoteExtensionAddressScreeningIndicator(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h225_ScreeningIndicator(tvb, offset, pinfo, tree, hf_h450_remoteExtensionAddressScreeningIndicator); +} +static int dissect_nonStandardData(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h225_NonStandardParameter(tvb, offset, pinfo, tree, hf_h450_nonStandardData); +} +static int dissect_ExtensionSeq_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_xxx_Extensionxxx(tvb, offset, pinfo, tree, hf_h450_ExtensionSeq_item); +} +static int dissect_extension(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_xxx_Extensionxxx(tvb, offset, pinfo, tree, hf_h450_extension); +} +static int dissect_extension1(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_xxx_Extension(tvb, offset, pinfo, tree, hf_h450_extension1); +} +static int dissect_nonStandard(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h225_NonStandardParameter(tvb, offset, pinfo, tree, hf_h450_nonStandard); +} + + +static int +dissect_h450_NULL(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + { proto_item *ti_tmp; + ti_tmp = proto_tree_add_item(tree, hf_index, tvb, offset>>8, 0, FALSE); + proto_item_append_text(ti_tmp, ": NULL"); + } + + return offset; +} +static int dissect_endpoint(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NULL(tvb, offset, pinfo, tree, hf_h450_endpoint); +} +static int dissect_anyEntity(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NULL(tvb, offset, pinfo, tree, hf_h450_anyEntity); +} +static int dissect_discardAnyUnrecognizedInvokePdu(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NULL(tvb, offset, pinfo, tree, hf_h450_discardAnyUnrecognizedInvokePdu); +} +static int dissect_clearCallIfAnyInvokePduNotRecognized(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NULL(tvb, offset, pinfo, tree, hf_h450_clearCallIfAnyInvokePduNotRecognized); +} +static int dissect_rejectAnyUnrecognizedInvokePdu(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NULL(tvb, offset, pinfo, tree, hf_h450_rejectAnyUnrecognizedInvokePdu); +} +static int dissect_presentationRestricted(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NULL(tvb, offset, pinfo, tree, hf_h450_presentationRestricted); +} +static int dissect_numberNotAvailableDueToInterworking(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NULL(tvb, offset, pinfo, tree, hf_h450_numberNotAvailableDueToInterworking); +} +static int dissect_nameNotAvailable(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NULL(tvb, offset, pinfo, tree, hf_h450_nameNotAvailable); +} +static int dissect_restrictedNull(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NULL(tvb, offset, pinfo, tree, hf_h450_restrictedNull); +} + + +static const value_string h450_EntityType_vals[] = { + { 0, "endpoint" }, + { 1, "anyEntity" }, + { 0, NULL } +}; + +static const per_choice_t EntityType_choice[] = { + { 0, "endpoint" , ASN1_EXTENSION_ROOT , dissect_endpoint }, + { 1, "anyEntity" , ASN1_EXTENSION_ROOT , dissect_anyEntity }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_EntityType(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_EntityType, EntityType_choice, "EntityType", + NULL); + + return offset; +} +static int dissect_sourceEntity(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_EntityType(tvb, offset, pinfo, tree, hf_h450_sourceEntity); +} +static int dissect_destinationEntity(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_EntityType(tvb, offset, pinfo, tree, hf_h450_destinationEntity); +} + + +static int +dissect_h450_AddressInformation(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_h225_AliasAddress(tvb, offset, pinfo, tree, hf_index); + + return offset; +} +static int dissect_sourceEntityAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_AddressInformation(tvb, offset, pinfo, tree, hf_h450_sourceEntityAddress); +} +static int dissect_destinationEntityAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_AddressInformation(tvb, offset, pinfo, tree, hf_h450_destinationEntityAddress); +} + +static const per_sequence_t NetworkFacilityExtension_sequence[] = { + { "sourceEntity" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_sourceEntity }, + { "sourceEntityAddress" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_sourceEntityAddress }, + { "destinationEntity" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_destinationEntity }, + { "destinationEntityAddress" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_destinationEntityAddress }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_NetworkFacilityExtension(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_NetworkFacilityExtension, NetworkFacilityExtension_sequence); + + return offset; +} +static int dissect_networkFacilityExtension(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NetworkFacilityExtension(tvb, offset, pinfo, tree, hf_h450_networkFacilityExtension); +} + + +static const value_string h450_InterpretationApdu_vals[] = { + { 0, "discardAnyUnrecognizedInvokePdu" }, + { 1, "clearCallIfAnyInvokePduNotRecognized" }, + { 2, "rejectAnyUnrecognizedInvokePdu" }, + { 0, NULL } +}; + +static const per_choice_t InterpretationApdu_choice[] = { + { 0, "discardAnyUnrecognizedInvokePdu", ASN1_EXTENSION_ROOT , dissect_discardAnyUnrecognizedInvokePdu }, + { 1, "clearCallIfAnyInvokePduNotRecognized", ASN1_EXTENSION_ROOT , dissect_clearCallIfAnyInvokePduNotRecognized }, + { 2, "rejectAnyUnrecognizedInvokePdu", ASN1_EXTENSION_ROOT , dissect_rejectAnyUnrecognizedInvokePdu }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_InterpretationApdu(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_InterpretationApdu, InterpretationApdu_choice, "InterpretationApdu", + NULL); + + return offset; +} +static int dissect_interpretationApdu(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_InterpretationApdu(tvb, offset, pinfo, tree, hf_h450_interpretationApdu); +} + + +static int +dissect_h450_SEQUNCE_OF_ROSxxx(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_index, + ett_h450_SEQUNCE_OF_ROSxxx, dissect_rosApdus_item); + + return offset; +} +static int dissect_rosApdus(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_SEQUNCE_OF_ROSxxx(tvb, offset, pinfo, tree, hf_h450_rosApdus); +} + + +static const value_string h450_ServiceApdus_vals[] = { + { 0, "rosApdus" }, + { 0, NULL } +}; + +static const per_choice_t ServiceApdus_choice[] = { + { 0, "rosApdus" , ASN1_EXTENSION_ROOT , dissect_rosApdus }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_ServiceApdus(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_ServiceApdus, ServiceApdus_choice, "ServiceApdus", + NULL); + + return offset; +} +static int dissect_serviceApdu(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_ServiceApdus(tvb, offset, pinfo, tree, hf_h450_serviceApdu); +} + +static const per_sequence_t H4501SupplementaryService_sequence[] = { + { "networkFacilityExtension" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_networkFacilityExtension }, + { "interpretationApdu" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_interpretationApdu }, + { "serviceApdu" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_serviceApdu }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_H4501SupplementaryService(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_H4501SupplementaryService, H4501SupplementaryService_sequence); + + return offset; +} + + +static int +dissect_h450_Notassignedlocalopcode(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_octet_string(tvb, offset, pinfo, tree, hf_index, + -1, -1, + NULL, NULL); + + return offset; +} + + +static int +dissect_h450_SubaddressInformation(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_octet_string(tvb, offset, pinfo, tree, hf_index, + 1, 20, + NULL, NULL); + + return offset; +} +static int dissect_subaddressInformation(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_SubaddressInformation(tvb, offset, pinfo, tree, hf_h450_subaddressInformation); +} + + +static int +dissect_h450_BOOLEAN(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_boolean(tvb, offset, pinfo, tree, hf_index, + NULL, NULL); + + return offset; +} +static int dissect_oddCountIndicator(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_BOOLEAN(tvb, offset, pinfo, tree, hf_h450_oddCountIndicator); +} +static int dissect_callbackReq(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_BOOLEAN(tvb, offset, pinfo, tree, hf_h450_callbackReq); +} + +static const per_sequence_t UserSpecifiedSubaddress_sequence[] = { + { "subaddressInformation" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_subaddressInformation }, + { "oddCountIndicator" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_oddCountIndicator }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_UserSpecifiedSubaddress(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_UserSpecifiedSubaddress, UserSpecifiedSubaddress_sequence); + + return offset; +} +static int dissect_userSpecifiedSubaddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_UserSpecifiedSubaddress(tvb, offset, pinfo, tree, hf_h450_userSpecifiedSubaddress); +} + + +static int +dissect_h450_NSAPSubaddress(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_octet_string(tvb, offset, pinfo, tree, hf_index, + 1, 20, + NULL, NULL); + + return offset; +} +static int dissect_nsapSubaddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NSAPSubaddress(tvb, offset, pinfo, tree, hf_h450_nsapSubaddress); +} + + +static const value_string h450_PartySubaddress_vals[] = { + { 0, "userSpecifiedSubaddress" }, + { 1, "nsapSubaddress" }, + { 0, NULL } +}; + +static const per_choice_t PartySubaddress_choice[] = { + { 0, "userSpecifiedSubaddress" , ASN1_EXTENSION_ROOT , dissect_userSpecifiedSubaddress }, + { 1, "nsapSubaddress" , ASN1_EXTENSION_ROOT , dissect_nsapSubaddress }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_PartySubaddress(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_PartySubaddress, PartySubaddress_choice, "PartySubaddress", + NULL); + + return offset; +} +static int dissect_partySubaddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_PartySubaddress(tvb, offset, pinfo, tree, hf_h450_partySubaddress); +} +static int dissect_redirectionSubaddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_PartySubaddress(tvb, offset, pinfo, tree, hf_h450_redirectionSubaddress); +} + +static const per_sequence_t AddressScreened_sequence[] = { + { "partyNumber" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_partyNumber }, + { "screeningIndicator" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_screeningIndicator }, + { "partySubaddress" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_partySubaddress }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_AddressScreened(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_AddressScreened, AddressScreened_sequence); + + return offset; +} +static int dissect_addressScreened_presentationAllowedAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_AddressScreened(tvb, offset, pinfo, tree, hf_h450_addressScreened_presentationAllowedAddress); +} +static int dissect_addressScreened_presentationRestrictedAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_AddressScreened(tvb, offset, pinfo, tree, hf_h450_addressScreened_presentationRestrictedAddress); +} + + +static const value_string h450_PresentedAddressScreened_vals[] = { + { 0, "presentationAllowedAddress" }, + { 1, "presentationRestricted" }, + { 2, "numberNotAvailableDueToInterworking" }, + { 3, "presentationRestrictedAddress" }, + { 0, NULL } +}; + +static const per_choice_t PresentedAddressScreened_choice[] = { + { 0, "presentationAllowedAddress" , ASN1_EXTENSION_ROOT , dissect_addressScreened_presentationAllowedAddress }, + { 1, "presentationRestricted" , ASN1_EXTENSION_ROOT , dissect_presentationRestricted }, + { 2, "numberNotAvailableDueToInterworking", ASN1_EXTENSION_ROOT , dissect_numberNotAvailableDueToInterworking }, + { 3, "presentationRestrictedAddress", ASN1_EXTENSION_ROOT , dissect_addressScreened_presentationRestrictedAddress }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_PresentedAddressScreened(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_PresentedAddressScreened, PresentedAddressScreened_choice, "PresentedAddressScreened", + NULL); + + return offset; +} + +static const per_sequence_t Address_sequence[] = { + { "partyNumber" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_partyNumber }, + { "partySubaddress" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_partySubaddress }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_Address(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_Address, Address_sequence); + + return offset; +} +static int dissect_addressUnscreened_presentationAllowedAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_Address(tvb, offset, pinfo, tree, hf_h450_addressUnscreened_presentationAllowedAddress); +} +static int dissect_addressUnscreened_presentationRestrictedAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_Address(tvb, offset, pinfo, tree, hf_h450_addressUnscreened_presentationRestrictedAddress); +} + + +static const value_string h450_PresentedAddressUnscreened_vals[] = { + { 0, "presentationAllowedAddress" }, + { 1, "presentationRestricted" }, + { 2, "numberNotAvailableDueToInterworking" }, + { 3, "presentationRestrictedAddress" }, + { 0, NULL } +}; + +static const per_choice_t PresentedAddressUnscreened_choice[] = { + { 0, "presentationAllowedAddress" , ASN1_EXTENSION_ROOT , dissect_addressUnscreened_presentationAllowedAddress }, + { 1, "presentationRestricted" , ASN1_EXTENSION_ROOT , dissect_presentationRestricted }, + { 2, "numberNotAvailableDueToInterworking", ASN1_EXTENSION_ROOT , dissect_numberNotAvailableDueToInterworking }, + { 3, "presentationRestrictedAddress", ASN1_EXTENSION_ROOT , dissect_addressUnscreened_presentationRestrictedAddress }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_PresentedAddressUnscreened(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_PresentedAddressUnscreened, PresentedAddressUnscreened_choice, "PresentedAddressUnscreened", + NULL); + + return offset; +} + +static const per_sequence_t NumberScreened_sequence[] = { + { "partyNumber" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_partyNumber }, + { "screeningIndicator" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_screeningIndicator }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_NumberScreened(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_NumberScreened, NumberScreened_sequence); + + return offset; +} +static int dissect_numberScreened_presentationAllowedAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NumberScreened(tvb, offset, pinfo, tree, hf_h450_numberScreened_presentationAllowedAddress); +} +static int dissect_numberScreened_presentationRestrictedAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NumberScreened(tvb, offset, pinfo, tree, hf_h450_numberScreened_presentationRestrictedAddress); +} + + +static const value_string h450_PresentedNumberScreened_vals[] = { + { 0, "presentationAllowedAddress" }, + { 1, "presentationRestricted" }, + { 2, "numberNotAvailableDueToInterworking" }, + { 3, "presentationRestrictedAddress" }, + { 0, NULL } +}; + +static const per_choice_t PresentedNumberScreened_choice[] = { + { 0, "presentationAllowedAddress" , ASN1_EXTENSION_ROOT , dissect_numberScreened_presentationAllowedAddress }, + { 1, "presentationRestricted" , ASN1_EXTENSION_ROOT , dissect_presentationRestricted }, + { 2, "numberNotAvailableDueToInterworking", ASN1_EXTENSION_ROOT , dissect_numberNotAvailableDueToInterworking }, + { 3, "presentationRestrictedAddress", ASN1_EXTENSION_ROOT , dissect_numberScreened_presentationRestrictedAddress }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_PresentedNumberScreened(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_PresentedNumberScreened, PresentedNumberScreened_choice, "PresentedNumberScreened", + NULL); + + return offset; +} + + +static const value_string h450_PresentedNumberUnscreened_vals[] = { + { 0, "presentationAllowedAddress" }, + { 1, "presentationRestricted" }, + { 2, "numberNotAvailableDueToInterworking" }, + { 3, "presentationRestrictedAddress" }, + { 0, NULL } +}; + +static const per_choice_t PresentedNumberUnscreened_choice[] = { + { 0, "presentationAllowedAddress" , ASN1_EXTENSION_ROOT , dissect_numberUnscreened_presentationAllowedAddress }, + { 1, "presentationRestricted" , ASN1_EXTENSION_ROOT , dissect_presentationRestricted }, + { 2, "numberNotAvailableDueToInterworking", ASN1_EXTENSION_ROOT , dissect_numberNotAvailableDueToInterworking }, + { 3, "presentationRestrictedAddress", ASN1_EXTENSION_ROOT , dissect_numberUnscreened_presentationRestrictedAddress }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_PresentedNumberUnscreened(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_PresentedNumberUnscreened, PresentedNumberUnscreened_choice, "PresentedNumberUnscreened", + NULL); + + return offset; +} + + +static int +dissect_h450_SEQUNCE_OF_AliasAddress(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_index, + ett_h450_SEQUNCE_OF_AliasAddress, dissect_destinationAddress_item); + + return offset; +} +static int dissect_destinationAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_SEQUNCE_OF_AliasAddress(tvb, offset, pinfo, tree, hf_h450_destinationAddress); +} + +static const per_sequence_t EndpointAddress_sequence[] = { + { "destinationAddress" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_destinationAddress }, + { "remoteExtensionAddress" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_remoteExtensionAddress }, + { "destinationAddressPresentationIndicator", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_destinationAddressPresentationIndicator }, + { "destinationAddressScreeningIndicator", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_destinationAddressScreeningIndicator }, + { "remoteExtensionAddressPresentationIndicator", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_remoteExtensionAddressPresentationIndicator }, + { "remoteExtensionAddressScreeningIndicator", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_remoteExtensionAddressScreeningIndicator }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_EndpointAddress(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_EndpointAddress, EndpointAddress_sequence); + + return offset; +} +static int dissect_reroutingNumber(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_EndpointAddress(tvb, offset, pinfo, tree, hf_h450_reroutingNumber); +} +static int dissect_transferringNumber(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_EndpointAddress(tvb, offset, pinfo, tree, hf_h450_transferringNumber); +} +static int dissect_redirectionNumber(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_EndpointAddress(tvb, offset, pinfo, tree, hf_h450_redirectionNumber); +} +static int dissect_connectedAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_EndpointAddress(tvb, offset, pinfo, tree, hf_h450_connectedAddress); +} +static int dissect_servedUserNr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_EndpointAddress(tvb, offset, pinfo, tree, hf_h450_servedUserNr); +} +static int dissect_originatingNr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_EndpointAddress(tvb, offset, pinfo, tree, hf_h450_originatingNr); +} +static int dissect_mwipartyNumber(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_EndpointAddress(tvb, offset, pinfo, tree, hf_h450_mwipartyNumber); +} + + +static int +dissect_h450_PresentationAllowedIndicator(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_boolean(tvb, offset, pinfo, tree, hf_index, + NULL, NULL); + + return offset; +} + + +static int +dissect_h450_ExtensionSeq(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_index, + ett_h450_ExtensionSeq, dissect_ExtensionSeq_item); + + return offset; +} +static int dissect_extensionSeq(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_ExtensionSeq(tvb, offset, pinfo, tree, hf_h450_extensionSeq); +} + + +static const value_string h450_DummyArg_vals[] = { + { 0, "extensionSeq" }, + { 1, "nonStandardData" }, + { 0, NULL } +}; + +static const per_choice_t DummyArg_choice[] = { + { 0, "extensionSeq" , ASN1_NO_EXTENSIONS , dissect_extensionSeq }, + { 1, "nonStandardData" , ASN1_NO_EXTENSIONS , dissect_nonStandardData }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_DummyArg(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_DummyArg, DummyArg_choice, "DummyArg", + NULL); + + return offset; +} + + +static int +dissect_h450_CallTransferIdentify(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_h450_DummyArg(tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static int +dissect_h450_CallTransferAbandon(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_h450_DummyArg(tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const value_string h450_DummyRes_vals[] = { + { 0, "extensionSeq" }, + { 1, "nonStandardData" }, + { 0, NULL } +}; + +static const per_choice_t DummyRes_choice[] = { + { 0, "extensionSeq" , ASN1_NO_EXTENSIONS , dissect_extensionSeq }, + { 1, "nonStandardData" , ASN1_NO_EXTENSIONS , dissect_nonStandardData }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_DummyRes(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_DummyRes, DummyRes_choice, "DummyRes", + NULL); + + return offset; +} + + +static int +dissect_h450_CallTransferInitiate(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_h450_DummyRes(tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static int +dissect_h450_CallTransferSetup(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_h450_DummyRes(tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static int +dissect_h450_BMPString_SIZE_1_128(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_BMPString(tvb, offset, pinfo, tree, hf_index, + 1, 128); + + return offset; +} +static int dissect_redirectionInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_BMPString_SIZE_1_128(tvb, offset, pinfo, tree, hf_h450_redirectionInfo); +} +static int dissect_connectedInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_BMPString_SIZE_1_128(tvb, offset, pinfo, tree, hf_h450_connectedInfo); +} + + +static int +dissect_h450_H225InformationElement(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_octet_string(tvb, offset, pinfo, tree, hf_index, + -1, -1, + NULL, NULL); + + return offset; +} +static int dissect_basicCallInfoElements(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_H225InformationElement(tvb, offset, pinfo, tree, hf_h450_basicCallInfoElements); +} + + +static const value_string h450_ArgumentExtension_vals[] = { + { 0, "extensionSeq" }, + { 1, "nonStandardData" }, + { 0, NULL } +}; + +static const per_choice_t ArgumentExtension_choice[] = { + { 0, "extensionSeq" , ASN1_NO_EXTENSIONS , dissect_extensionSeq }, + { 1, "nonStandardData" , ASN1_NO_EXTENSIONS , dissect_nonStandardData }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_ArgumentExtension(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_ArgumentExtension, ArgumentExtension_choice, "ArgumentExtension", + NULL); + + return offset; +} +static int dissect_argumentExtension(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_ArgumentExtension(tvb, offset, pinfo, tree, hf_h450_argumentExtension); +} + +static const per_sequence_t CTUpdateArg_sequence[] = { + { "redirectionNumber" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_redirectionNumber }, + { "redirectionInfo" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_redirectionInfo }, + { "basicCallInfoElements" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_basicCallInfoElements }, + { "argumentExtension" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_argumentExtension }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_CTUpdateArg(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_CTUpdateArg, CTUpdateArg_sequence); + + return offset; +} + + +static int +dissect_h450_CallTransferUpdate(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_h450_CTUpdateArg(tvb, offset, pinfo, tree, hf_index); + + return offset; +} + +static const per_sequence_t SubaddressTransferArg_sequence[] = { + { "redirectionSubaddress" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_redirectionSubaddress }, + { "argumentExtension" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_argumentExtension }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_SubaddressTransferArg(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_SubaddressTransferArg, SubaddressTransferArg_sequence); + + return offset; +} + + +static int +dissect_h450_SubaddressTransfer(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_h450_SubaddressTransferArg(tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static const value_string h450_EndDesignation_vals[] = { + { 0, "primaryEnd" }, + { 1, "secondaryEnd" }, + { 0, NULL } +}; + + +static int +dissect_h450_EndDesignation(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_constrained_integer(tvb, offset, pinfo, tree, hf_index, + 0, 1, NULL, NULL, TRUE); + + return offset; +} +static int dissect_endDesignation(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_EndDesignation(tvb, offset, pinfo, tree, hf_h450_endDesignation); +} + + +static const value_string h450_CallStatus_vals[] = { + { 0, "answered" }, + { 1, "alerting" }, + { 0, NULL } +}; + + +static int +dissect_h450_CallStatus(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_constrained_integer(tvb, offset, pinfo, tree, hf_index, + 0, 1, NULL, NULL, TRUE); + + return offset; +} +static int dissect_callStatus(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_CallStatus(tvb, offset, pinfo, tree, hf_h450_callStatus); +} + +static const per_sequence_t CTCompleteArg_sequence[] = { + { "endDesignation" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_endDesignation }, + { "redirectionNumber" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_redirectionNumber }, + { "basicCallInfoElements" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_basicCallInfoElements }, + { "redirectionInfo" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_redirectionInfo }, + { "callStatus" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_callStatus }, + { "argumentExtension" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_argumentExtension }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_CTCompleteArg(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_CTCompleteArg, CTCompleteArg_sequence); + + return offset; +} + + +static int +dissect_h450_CallTransferComplete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_h450_CTCompleteArg(tvb, offset, pinfo, tree, hf_index); + + return offset; +} + +static const per_sequence_t CTActiveArg_sequence[] = { + { "connectedAddress" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_connectedAddress }, + { "basicCallInfoElements" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_basicCallInfoElements }, + { "connectedInfo" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_connectedInfo }, + { "argumentExtension" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_argumentExtension }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_CTActiveArg(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_CTActiveArg, CTActiveArg_sequence); + + return offset; +} + + +static int +dissect_h450_CallTransferActive(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_h450_CTActiveArg(tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static int +dissect_h450_CallIdentity(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_NumericString(tvb, offset, pinfo, tree, hf_index, + 0, 4); + + return offset; +} +static int dissect_callIdentity(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_CallIdentity(tvb, offset, pinfo, tree, hf_h450_callIdentity); +} + +static const per_sequence_t CTInitiateArg_sequence[] = { + { "callIdentity" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_callIdentity }, + { "reroutingNumber" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_reroutingNumber }, + { "argumentExtension" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_argumentExtension }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_CTInitiateArg(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_CTInitiateArg, CTInitiateArg_sequence); + + return offset; +} + +static const per_sequence_t CTSetupArg_sequence[] = { + { "callIdentity" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_callIdentity }, + { "transferringNumber" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_transferringNumber }, + { "argumentExtension" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_argumentExtension }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_CTSetupArg(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_CTSetupArg, CTSetupArg_sequence); + + return offset; +} + + +static const value_string h450_T_resultExtension_vals[] = { + { 0, "extensionSeq" }, + { 1, "nonStandardData" }, + { 0, NULL } +}; + +static const per_choice_t T_resultExtension_choice[] = { + { 0, "extensionSeq" , ASN1_NO_EXTENSIONS , dissect_extensionSeq }, + { 1, "nonStandardData" , ASN1_NO_EXTENSIONS , dissect_nonStandardData }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_T_resultExtension(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_T_resultExtension, T_resultExtension_choice, "T_resultExtension", + NULL); + + return offset; +} +static int dissect_resultExtension(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_T_resultExtension(tvb, offset, pinfo, tree, hf_h450_resultExtension); +} + +static const per_sequence_t CTIdentifyRes_sequence[] = { + { "callIdentity" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_callIdentity }, + { "reroutingNumber" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_reroutingNumber }, + { "resultExtension" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_resultExtension }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_CTIdentifyRes(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_CTIdentifyRes, CTIdentifyRes_sequence); + + return offset; +} + + +static const value_string h450_MixedExtension_vals[] = { + { 0, "extension" }, + { 1, "nonStandardData" }, + { 0, NULL } +}; + +static const per_choice_t MixedExtension_choice[] = { + { 0, "extension" , ASN1_NO_EXTENSIONS , dissect_extension }, + { 1, "nonStandardData" , ASN1_NO_EXTENSIONS , dissect_nonStandardData }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_MixedExtension(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_MixedExtension, MixedExtension_choice, "MixedExtension", + NULL); + + return offset; +} +static int dissect_ExtensionArg_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_MixedExtension(tvb, offset, pinfo, tree, hf_h450_ExtensionArg_item); +} +static int dissect_extensionRes_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_MixedExtension(tvb, offset, pinfo, tree, hf_h450_extensionRes_item); +} +static int dissect_MwiDummyRes_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_MixedExtension(tvb, offset, pinfo, tree, hf_h450_MwiDummyRes_item); +} + + +static int +dissect_h450_ExtensionArg(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_constrained_sequence_of(tvb, offset, pinfo, tree, hf_index, + ett_h450_ExtensionArg, dissect_ExtensionArg_item, + 0, 255); + + return offset; +} +static int dissect_extensionArg(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_ExtensionArg(tvb, offset, pinfo, tree, hf_h450_extensionArg); +} + +static const per_sequence_t HoldNotificArg_sequence[] = { + { "extensionArg" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_extensionArg }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_HoldNotificArg(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_HoldNotificArg, HoldNotificArg_sequence); + + return offset; +} + + +static int +dissect_h450_HoldNotific(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_h450_HoldNotificArg(tvb, offset, pinfo, tree, hf_index); + + return offset; +} + +static const per_sequence_t RetrieveNotificArg_sequence[] = { + { "extensionArg" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_extensionArg }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_RetrieveNotificArg(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_RetrieveNotificArg, RetrieveNotificArg_sequence); + + return offset; +} + + +static int +dissect_h450_RetrieveNotific(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_h450_RetrieveNotificArg(tvb, offset, pinfo, tree, hf_index); + + return offset; +} + +static const per_sequence_t RemoteHoldArg_sequence[] = { + { "extensionArg" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_extensionArg }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_RemoteHoldArg(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_RemoteHoldArg, RemoteHoldArg_sequence); + + return offset; +} + + +static int +dissect_h450_RemoteHold(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_h450_RemoteHoldArg(tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static int +dissect_h450_SEQUNCE_SIZE_0_255_OF_MixedExtension(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_constrained_sequence_of(tvb, offset, pinfo, tree, hf_index, + ett_h450_SEQUNCE_SIZE_0_255_OF_MixedExtension, dissect_extensionRes_item, + 0, 255); + + return offset; +} +static int dissect_extensionRes(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_SEQUNCE_SIZE_0_255_OF_MixedExtension(tvb, offset, pinfo, tree, hf_h450_extensionRes); +} + +static const per_sequence_t RemoteHoldRes_sequence[] = { + { "extensionRes" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_extensionRes }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_RemoteHoldRes(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_RemoteHoldRes, RemoteHoldRes_sequence); + + return offset; +} + +static const per_sequence_t RemoteRetrieveArg_sequence[] = { + { "extensionArg" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_extensionArg }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_RemoteRetrieveArg(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_RemoteRetrieveArg, RemoteRetrieveArg_sequence); + + return offset; +} + + +static int +dissect_h450_RemoteRetrieve(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_h450_RemoteRetrieveArg(tvb, offset, pinfo, tree, hf_index); + + return offset; +} + +static const per_sequence_t RemoteRetrieveRes_sequence[] = { + { "extensionRes" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_extensionRes }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_RemoteRetrieveRes(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_RemoteRetrieveRes, RemoteRetrieveRes_sequence); + + return offset; +} + + +static const value_string h450_BasicService_vals[] = { + { 0, "allServices" }, + { 1, "speech" }, + { 2, "unrestrictedDigitalInformation" }, + { 3, "audio3100Hz" }, + { 32, "telephony" }, + { 33, "teletex" }, + { 34, "telefaxGroup4Class1" }, + { 35, "videotexSyntaxBased" }, + { 36, "videotelephony" }, + { 37, "telefaxGroup2-3" }, + { 38, "reservedNotUsed1" }, + { 39, "reservedNotUsed2" }, + { 40, "reservedNotUsed3" }, + { 41, "reservedNotUsed4" }, + { 42, "reservedNotUsed5" }, + { 51, "email" }, + { 52, "video" }, + { 53, "fileTransfer" }, + { 54, "shortMessageService" }, + { 55, "speechAndVideo" }, + { 56, "speechAndFax" }, + { 57, "speechAndEmail" }, + { 58, "videoAndFax" }, + { 59, "videoAndEmail" }, + { 60, "faxAndEmail" }, + { 61, "speechVideoAndFax" }, + { 62, "speechVideoAndEmail" }, + { 63, "speechFaxAndEmail" }, + { 64, "videoFaxAndEmail" }, + { 65, "speechVideoFaxAndEmail" }, + { 66, "multimediaUnknown" }, + { 67, "serviceUnknown" }, + { 68, "futureReserve1" }, + { 69, "futureReserve2" }, + { 70, "futureReserve3" }, + { 71, "futureReserve4" }, + { 72, "futureReserve5" }, + { 73, "futureReserve6" }, + { 74, "futureReserve7" }, + { 75, "futureReserve8" }, + { 0, NULL } +}; + + +static int +dissect_h450_BasicService(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_constrained_integer(tvb, offset, pinfo, tree, hf_index, + 0, 75, NULL, NULL, FALSE); + + return offset; +} +static int dissect_basicService(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_BasicService(tvb, offset, pinfo, tree, hf_h450_basicService); +} + + + +static int +dissect_h450_INTEGER_0_65535(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_constrained_integer(tvb, offset, pinfo, tree, hf_index, + 0U, 65535U, NULL, NULL, FALSE); + + return offset; +} +static int dissect_integer(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_INTEGER_0_65535(tvb, offset, pinfo, tree, hf_h450_integer); +} + + +static int +dissect_h450_NumericString_SIZE_1_10(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_NumericString(tvb, offset, pinfo, tree, hf_index, + 1, 10); + + return offset; +} +static int dissect_numericString(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NumericString_SIZE_1_10(tvb, offset, pinfo, tree, hf_h450_numericString); +} + + +static const value_string h450_MsgCentreId_vals[] = { + { 0, "integer" }, + { 1, "mwipartyNumber" }, + { 2, "numericString" }, + { 0, NULL } +}; + +static const per_choice_t MsgCentreId_choice[] = { + { 0, "integer" , ASN1_NO_EXTENSIONS , dissect_integer }, + { 1, "mwipartyNumber" , ASN1_NO_EXTENSIONS , dissect_mwipartyNumber }, + { 2, "numericString" , ASN1_NO_EXTENSIONS , dissect_numericString }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_MsgCentreId(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_MsgCentreId, MsgCentreId_choice, "MsgCentreId", + NULL); + + return offset; +} +static int dissect_msgCentreId(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_MsgCentreId(tvb, offset, pinfo, tree, hf_h450_msgCentreId); +} + + + +static int +dissect_h450_NbOfMessages(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_constrained_integer(tvb, offset, pinfo, tree, hf_index, + 0U, 65535U, NULL, NULL, FALSE); + + return offset; +} +static int dissect_nbOfMessages(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NbOfMessages(tvb, offset, pinfo, tree, hf_h450_nbOfMessages); +} + + +static int +dissect_h450_TimeStamp(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_VisibleString(tvb, offset, pinfo, tree, hf_index, + 12, 19); + + return offset; +} +static int dissect_timestamp(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_TimeStamp(tvb, offset, pinfo, tree, hf_h450_timestamp); +} + + + +static int +dissect_h450_INTEGER_0_9(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_constrained_integer(tvb, offset, pinfo, tree, hf_index, + 0U, 9U, NULL, NULL, FALSE); + + return offset; +} +static int dissect_priority(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_INTEGER_0_9(tvb, offset, pinfo, tree, hf_h450_priority); +} + +static const per_sequence_t MWIActivateArg_sequence[] = { + { "servedUserNr" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_servedUserNr }, + { "basicService" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_basicService }, + { "msgCentreId" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_msgCentreId }, + { "nbOfMessages" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_nbOfMessages }, + { "originatingNr" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_originatingNr }, + { "timestamp" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_timestamp }, + { "priority" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_priority }, + { "extensionArg" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_extensionArg }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_MWIActivateArg(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_MWIActivateArg, MWIActivateArg_sequence); + + return offset; +} + + +static int +dissect_h450_MwiActivate(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_h450_MWIActivateArg(tvb, offset, pinfo, tree, hf_index); + + return offset; +} + +static const per_sequence_t MWIDeactivateArg_sequence[] = { + { "servedUserNr" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_servedUserNr }, + { "basicService" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_basicService }, + { "msgCentreId" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_msgCentreId }, + { "callbackReq" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_callbackReq }, + { "extensionArg" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_extensionArg }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_MWIDeactivateArg(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_MWIDeactivateArg, MWIDeactivateArg_sequence); + + return offset; +} + + +static int +dissect_h450_MwiDeactivate(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_h450_MWIDeactivateArg(tvb, offset, pinfo, tree, hf_index); + + return offset; +} + +static const per_sequence_t MWIInterrogateArg_sequence[] = { + { "servedUserNr" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_servedUserNr }, + { "basicService" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_basicService }, + { "msgCentreId" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_msgCentreId }, + { "callbackReq" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_callbackReq }, + { "extensionArg" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_extensionArg }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_MWIInterrogateArg(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_MWIInterrogateArg, MWIInterrogateArg_sequence); + + return offset; +} + + +static int +dissect_h450_MwiInterrogate(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_h450_MWIInterrogateArg(tvb, offset, pinfo, tree, hf_index); + + return offset; +} + + +static int +dissect_h450_MwiDummyRes(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_constrained_sequence_of(tvb, offset, pinfo, tree, hf_index, + ett_h450_MwiDummyRes, dissect_MwiDummyRes_item, + 0, 255); + + return offset; +} + +static const per_sequence_t MWIInterrogateResElt_sequence[] = { + { "basicService" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_basicService }, + { "msgCentreId" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_msgCentreId }, + { "nbOfMessages" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_nbOfMessages }, + { "originatingNr" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_originatingNr }, + { "timestamp" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_timestamp }, + { "priority" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_priority }, + { "extensionArg" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_extensionArg }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_MWIInterrogateResElt(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_MWIInterrogateResElt, MWIInterrogateResElt_sequence); + + return offset; +} +static int dissect_MWIInterrogateRes_item(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_MWIInterrogateResElt(tvb, offset, pinfo, tree, hf_h450_MWIInterrogateRes_item); +} + + +static int +dissect_h450_MWIInterrogateRes(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_constrained_sequence_of(tvb, offset, pinfo, tree, hf_index, + ett_h450_MWIInterrogateRes, dissect_MWIInterrogateRes_item, + 1, 64); + + return offset; +} + + +static int +dissect_h450_SimpleName(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_octet_string(tvb, offset, pinfo, tree, hf_index, + 1, 50, + NULL, NULL); + + return offset; +} +static int dissect_simpleName(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_SimpleName(tvb, offset, pinfo, tree, hf_h450_simpleName); +} + + +static int +dissect_h450_ExtendedName(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_BMPString(tvb, offset, pinfo, tree, hf_index, + 1, 256); + + return offset; +} +static int dissect_extendedName(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_ExtendedName(tvb, offset, pinfo, tree, hf_h450_extendedName); +} + + +static const value_string h450_NamePresentationAllowed_vals[] = { + { 0, "simpleName" }, + { 1, "extendedName" }, + { 0, NULL } +}; + +static const per_choice_t NamePresentationAllowed_choice[] = { + { 0, "simpleName" , ASN1_EXTENSION_ROOT , dissect_simpleName }, + { 1, "extendedName" , ASN1_EXTENSION_ROOT , dissect_extendedName }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_NamePresentationAllowed(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_NamePresentationAllowed, NamePresentationAllowed_choice, "NamePresentationAllowed", + NULL); + + return offset; +} +static int dissect_namePresentationAllowed(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NamePresentationAllowed(tvb, offset, pinfo, tree, hf_h450_namePresentationAllowed); +} + + +static const value_string h450_NamePresentationRestricted_vals[] = { + { 0, "simpleName" }, + { 1, "extendedName" }, + { 2, "restrictedNull" }, + { 0, NULL } +}; + +static const per_choice_t NamePresentationRestricted_choice[] = { + { 0, "simpleName" , ASN1_EXTENSION_ROOT , dissect_simpleName }, + { 1, "extendedName" , ASN1_EXTENSION_ROOT , dissect_extendedName }, + { 2, "restrictedNull" , ASN1_EXTENSION_ROOT , dissect_restrictedNull }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_NamePresentationRestricted(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_NamePresentationRestricted, NamePresentationRestricted_choice, "NamePresentationRestricted", + NULL); + + return offset; +} +static int dissect_namePresentationRestricted(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_NamePresentationRestricted(tvb, offset, pinfo, tree, hf_h450_namePresentationRestricted); +} + + +static const value_string h450_Name_vals[] = { + { 0, "namePresentationAllowed" }, + { 1, "namePresentationRestricted" }, + { 2, "nameNotAvailable" }, + { 0, NULL } +}; + +static const per_choice_t Name_choice[] = { + { 0, "namePresentationAllowed" , ASN1_EXTENSION_ROOT , dissect_namePresentationAllowed }, + { 1, "namePresentationRestricted" , ASN1_EXTENSION_ROOT , dissect_namePresentationRestricted }, + { 2, "nameNotAvailable" , ASN1_EXTENSION_ROOT , dissect_nameNotAvailable }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_Name(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_Name, Name_choice, "Name", + NULL); + + return offset; +} +static int dissect_name(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { + return dissect_h450_Name(tvb, offset, pinfo, tree, hf_h450_name); +} + +static const per_sequence_t CallingName_sequence[] = { + { "name" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_name }, + { "extensionArg" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_extensionArg }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_CallingName(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_CallingName, CallingName_sequence); + + return offset; +} + +static const per_sequence_t AlertingName_sequence[] = { + { "name" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_name }, + { "extensionArg" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_extensionArg }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_AlertingName(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_AlertingName, AlertingName_sequence); + + return offset; +} + +static const per_sequence_t ConnectedName_sequence[] = { + { "name" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_name }, + { "extensionArg" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_extensionArg }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_ConnectedName(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_ConnectedName, ConnectedName_sequence); + + return offset; +} + +static const per_sequence_t BusyName_sequence[] = { + { "name" , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_name }, + { "extensionArg" , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_extensionArg }, + { NULL, 0, 0, NULL } +}; + +static int +dissect_h450_BusyName(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_sequence(tvb, offset, pinfo, tree, hf_index, + ett_h450_BusyName, BusyName_sequence); + + return offset; +} + + +static const value_string h450_Unspecified_vals[] = { + { 0, "extension" }, + { 1, "nonStandard" }, + { 0, NULL } +}; + +static const per_choice_t Unspecified_choice[] = { + { 0, "extension" , ASN1_NO_EXTENSIONS , dissect_extension1 }, + { 1, "nonStandard" , ASN1_NO_EXTENSIONS , dissect_nonStandard }, + { 0, NULL, 0, NULL } +}; + +static int +dissect_h450_Unspecified(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { + offset = dissect_per_choice(tvb, offset, pinfo, tree, hf_index, + ett_h450_Unspecified, Unspecified_choice, "Unspecified", + NULL); + + return offset; +} + + +/*--- End of included file: 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; + case RemoteRetrieve: + dissect_h450_RemoteRetrieveRes(result_tvb, 0, pinfo , tree, hf_h4504_RemoteRetrieveRes); + break; + case MWIActivate: + dissect_h450_MwiDummyRes(result_tvb, 0, pinfo , tree, hf_h4507_MwiDummyRes); + break; + case MWIDeactivate: + dissect_h450_MwiDummyRes(result_tvb, 0, pinfo , tree, hf_h4507_MwiDummyRes); + break; + case MWIInterrogate: + dissect_h450_MWIInterrogateRes(result_tvb, 0, pinfo , tree, hf_h4507_MWIInterrogateRes); + 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; } @@ -389,7 +2096,8 @@ dissect_h4501_localOpcode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_t 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, NULL); + offset=dissect_per_object_identifier(tvb, offset, pinfo, tree, hf_h4501_globalCode, globalcode_oid_str); + is_globalcode = TRUE; return offset; } @@ -413,442 +2121,6 @@ dissect_h4501_opcode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree * return offset; } - -static int -dissect_h4501_ExtensionSeq(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ -PER_NOT_DECODED_YET("H.450.1 ExtensionSeq"); - return offset; -} - - -static int -dissect_h4502_nonStandardData(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset = dissect_h225_NonStandardParameter(tvb, offset, pinfo, tree, - hf_h4502_nonStandardData); - return offset; -} - -static const value_string Extension_vals[] = { - { 0, "extensionSeq" }, - { 1, "nonStandardData" }, - { 0, NULL} -}; -static const per_choice_t Extension_choice[] = { - { 0, "extensionSeq", ASN1_NO_EXTENSIONS, - dissect_h4501_ExtensionSeq }, - { 1, "nonStandardData", ASN1_NO_EXTENSIONS, - dissect_h4502_nonStandardData }, - { 0, NULL, 0, NULL } -}; -static int -dissect_h4502_DummyArg(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h4502_DummyArg, ett_h4502_DummyArg, Extension_choice, "DummyArg", NULL); - return offset; -} - - -static int -dissect_h4502_CallIdentity(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_NumericString(tvb, offset, pinfo, tree, hf_h4502_CallIdentity, 0, 4); - return offset; -} - - -static int -dissect_h4501_destinationAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h4501_destinationAddress, ett_h4501_destinationAddress, dissect_h225_AliasAddress); - return offset; -} - - -static const per_sequence_t EndpointAddress_sequence[] = { - { "destinationAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, - dissect_h4501_destinationAddress }, - { "remoteExtensionAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h225_AliasAddress }, - { NULL, 0, 0, NULL } -}; -static int -dissect_h4501_EndpointAddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h4501_EndpointAddress, ett_h4501_EndpointAddress, EndpointAddress_sequence); - return offset; -} - - -static int -dissect_h4501_argumentExtension(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h4501_argumentExtension, ett_h4501_argumentExtension, Extension_choice, "argumentExtension", NULL); - return offset; -} - - -static const per_sequence_t CTInitiateArg_sequence[] = { - { "callIdentity", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, - dissect_h4502_CallIdentity }, - { "reroutingNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, - dissect_h4501_EndpointAddress }, - { "argumentExtension", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4501_argumentExtension }, - { NULL, 0, 0, NULL } -}; -static int -dissect_h4502_CTInitiateArg(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h4502_CTInitiateArg, ett_h4502_CTInitiateArg, CTInitiateArg_sequence); - return offset; -} - - -static const per_sequence_t CTSetupArg_sequence[] = { - { "callIdentity", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, - dissect_h4502_CallIdentity }, - { "transferringNumber", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4501_EndpointAddress }, - { "argumentExtension", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4501_argumentExtension }, - { NULL, 0, 0, NULL } -}; -static int -dissect_h4502_CTSetupArg(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h4502_CTSetupArg, ett_h4502_CTSetupArg, CTSetupArg_sequence); - return offset; -} - - -static int -dissect_h4502_redirectionInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_BMPString(tvb, offset, pinfo, tree, hf_h4502_redirectionInfo, 1, 128); - return offset; -} - - -static int -dissect_h4501_H225InformationElement(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h4501_H225InformationElement, -1, -1, NULL, NULL); - return offset; -} - - -static const per_sequence_t CTUpdateArg_sequence[] = { - { "redirectionNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, - dissect_h4501_EndpointAddress }, - { "redirectionInfo", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4502_redirectionInfo }, - { "basicCallInfoElements", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4501_H225InformationElement }, - { "argumentExtension", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4501_argumentExtension }, - { NULL, 0, 0, NULL } -}; -static int -dissect_h4502_CTUpdateArg(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h4502_CTUpdateArg, ett_h4502_CTUpdateArg, CTUpdateArg_sequence); - return offset; -} - - -static int -dissect_h4501_SubaddressInformation(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h4501_SubaddressInformation, 1, 20, NULL, NULL); - return offset; -} - - -static const true_false_string tfs_oddCountIndicator_bit = { - "oddCountIndicator bit is SET", - "oddCountIndicator bit is CLEAR" -}; -static int -dissect_h4501_oddCountIndicator(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h4501_oddCountIndicator, NULL, NULL); - return offset; -} - - -static const per_sequence_t UserSpecifiedSubaddress_sequence[] = { - { "subaddressInformation", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, - dissect_h4501_SubaddressInformation }, - { "oddCountIndicator", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4501_oddCountIndicator }, - { NULL, 0, 0, NULL } -}; -static int -dissect_h4501_UserSpecifiedSubaddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h4501_UserSpecifiedSubaddress, ett_h4501_UserSpecifiedSubaddress, UserSpecifiedSubaddress_sequence); - return offset; -} - - -static int -dissect_h4501_NSAPSubaddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_octet_string(tvb, offset, pinfo, tree, hf_h4501_NSAPAddress, 1, 20, NULL, NULL); - return offset; -} - - -static const value_string PartySubaddress_vals[] = { - { 0, "userSpecifiedSubaddress" }, - { 1, "nsapSubaddress" }, - { 0, NULL} -}; -static const per_choice_t PartySubaddress_choice[] = { - { 0, "userSpecifiedSubaddress", ASN1_EXTENSION_ROOT, - dissect_h4501_UserSpecifiedSubaddress }, - { 1, "nsapSubaddress", ASN1_EXTENSION_ROOT, - dissect_h4501_NSAPSubaddress }, - { 0, NULL, 0, NULL } -}; -static int -dissect_h4501_PartySubaddress(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h4501_PartySubaddress, ett_h4501_PartySubaddress, PartySubaddress_choice, "PartySubaddress", NULL); - return offset; -} - - -static const per_sequence_t SubaddressTransferArg_sequence[] = { - { "redirectionSubaddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, - dissect_h4501_PartySubaddress }, - { "argumentExtension", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4501_argumentExtension }, - { NULL, 0, 0, NULL } -}; -static int -dissect_h4502_SubaddressTransferArg(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h4502_SubaddressTransferArg, ett_h4502_SubaddressTransferArg, SubaddressTransferArg_sequence); - return offset; -} - - -static const value_string EndDesignation_vals[] = { - { 0, "primaryEnd"}, - { 1, "secondaryEnd"}, - { 0, NULL } -}; -static int -dissect_h4502_EndDesignation(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_constrained_integer(tvb, offset, pinfo, tree, hf_h4502_EndDesignation, 0, 1, NULL, NULL, TRUE); - return offset; -} - - -static const value_string CallStatus_vals[] = { - { 0, "answered"}, - { 1, "alerting"}, - { 0, NULL } -}; -static int -dissect_h4502_CallStatus(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_constrained_integer(tvb, offset, pinfo, tree, hf_h4502_CallStatus, 0, 1, NULL, NULL, TRUE); - return offset; -} - - -static const per_sequence_t CTCompleteArg_sequence[] = { - { "endDesignation", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, - dissect_h4502_EndDesignation }, - { "redirectionNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, - dissect_h4501_EndpointAddress }, - { "basicCallInfoElements", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4501_H225InformationElement }, - { "redirectionInfo", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4502_redirectionInfo }, - { "callStatus", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, - dissect_h4502_CallStatus }, - { "argumentExtension", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4501_argumentExtension }, - { NULL, 0, 0, NULL } -}; -static int -dissect_h4502_CTCompleteArg(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h4502_CTCompleteArg, ett_h4502_CTCompleteArg, CTCompleteArg_sequence); - return offset; -} - - -static int -dissect_h4502_connectedInfo(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_BMPString(tvb, offset, pinfo, tree, hf_h4502_connectedInfo, 1, 128); - return offset; -} - - -static const per_sequence_t CTActiveArg_sequence[] = { - { "connectedAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, - dissect_h4501_EndpointAddress }, - { "basicCallInfoElements", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4501_H225InformationElement }, - { "connectedInfo", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4502_connectedInfo }, - { "argumentExtension", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4501_argumentExtension }, - { NULL, 0, 0, NULL } -}; -static int -dissect_h4502_CTActiveArg(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h4502_CTActiveArg, ett_h4502_CTActiveArg, CTActiveArg_sequence); - 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; - - 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_h4502_DummyArg(argument_tvb, 0, pinfo, tree); - break; - - case CallTransferInitiate: - dissect_h4502_CTInitiateArg(argument_tvb, 0, pinfo, tree); - break; - - case CallTransferSetup: - dissect_h4502_CTSetupArg(argument_tvb, 0, pinfo, tree); - break; - - case CallTransferUpdate: - dissect_h4502_CTUpdateArg(argument_tvb, 0, pinfo, tree); - break; - - case SubaddressTransfer: - dissect_h4502_SubaddressTransferArg(argument_tvb, 0, pinfo, tree); - break; - - case CallTransferComplete: - dissect_h4502_CTCompleteArg(argument_tvb, 0, pinfo, tree); - break; - - case CallTransferActive: - dissect_h4502_CTActiveArg(argument_tvb, 0, pinfo, tree); - break; - - /* TODO - decode other H.450.x invoke arguments here */ - - default: -PER_NOT_DECODED_YET("Unrecognized H.450.x operation"); - break; - } - } - 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 int -dissect_h4501_resultExtension(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h4501_resultExtension, ett_h4501_resultExtension, Extension_choice, "resultExtension", NULL); - return offset; -} - - -static const per_sequence_t CTIdentifyRes_sequence[] = { - { "callIdentity", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, - dissect_h4502_CallIdentity }, - { "reroutingNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, - dissect_h4501_EndpointAddress }, - { "resultExtension", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4501_resultExtension }, - { NULL, 0, 0, NULL } -}; -static int -dissect_h4502_CTIdentifyRes(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h4502_CTIdentifyRes, ett_h4502_CTIdentifyRes, CTIdentifyRes_sequence); - return offset; -} - - -static int -dissect_h4502_DummyRes(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h4502_DummyRes, ett_h4502_DummyRes, Extension_choice, "DummyRes", NULL); - 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_h4502_CTIdentifyRes(result_tvb, 0, pinfo, tree); - break; - - case CallTransferInitiate: - case CallTransferSetup: - dissect_h4502_DummyRes(result_tvb, 0, pinfo, tree); - break; - - default: -PER_NOT_DECODED_YET("Unrecognized H.450.x return result"); - break; - } - } - - return offset; -} - - static const per_sequence_t result_sequence[] = { { "opcode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, dissect_h4501_opcode }, @@ -863,22 +2135,13 @@ dissect_h4501_result(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree * 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) +dissect_h4501_parameter(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); + /* 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"}, @@ -954,96 +2217,6 @@ dissect_h4501_errorCode(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tre 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 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 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 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 problem_vals[] = { { 0, "general" }, { 1, "invoke" }, @@ -1068,8 +2241,21 @@ dissect_h4501_problem(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_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 }, @@ -1084,6 +2270,53 @@ dissect_h4501_Reject(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree * 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" }, @@ -1110,42 +2343,111 @@ dissect_h4501_ROS(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tre return offset; } - static int -dissect_h4501_rosApdus(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) +dissect_h4501_argument(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) { - offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h4501_rosApdus, ett_h4501_rosApdus, dissect_h4501_ROS); - return offset; -} + 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); -static const value_string ServiceApdus_vals[] = { - { 0, "rosApdus" }, - { 0, NULL} -}; -static const per_choice_t ServiceApdus_choice[] = { - { 0, "rosApdus", ASN1_EXTENSION_ROOT, - dissect_h4501_rosApdus }, - { 0, NULL, 0, NULL } -}; -static int -dissect_h4501_ServiceApdus(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) -{ - offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h4501_ServiceApdus, ett_h4501_ServiceApdus, ServiceApdus_choice, "ServiceApdus", NULL); + switch (localOpcode) { + case CallTransferIdentify: /* Localvalue 7 */ + case CallTransferAbandon: /* Localvalue 8 */ + dissect_h450_DummyArg(argument_tvb, 0, pinfo , tree, hf_h4502_DummyArg); + break; + + case CallTransferInitiate: /* Localvalue 9 */ + dissect_h450_CTInitiateArg(argument_tvb, 0, pinfo , tree, hf_h4502_CTInitiateArg); + break; + + case CallTransferSetup: /* Localvalue 10 */ + dissect_h450_CTSetupArg(argument_tvb, 0, pinfo , tree, hf_h4502_CTSetupArg); + break; + + case CallTransferUpdate: /* Localvalue 13 */ + dissect_h450_CTUpdateArg(argument_tvb, 0, pinfo , tree, hf_h4502_CTUpdateArg); + break; + + case SubaddressTransfer: /* Localvalue 14 */ + dissect_h450_SubaddressTransfer(argument_tvb, 0, pinfo , tree, hf_h4502_SubaddressTransferArg); + break; + + case CallTransferComplete: /* Localvalue 12 */ + dissect_h450_CTCompleteArg(argument_tvb, 0, pinfo , tree, hf_h4502_CTCompleteArg); + break; + + case CallTransferActive: /* Localvalue 11 */ + dissect_h450_CTActiveArg(argument_tvb, 0, pinfo , tree, hf_h4502_CTActiveArg); + break; + /* H.450.4 */ + case HoldNotific: /* Localvalue 101 */ + dissect_h450_HoldNotificArg(argument_tvb, 0, pinfo , tree, hf_h4504_HoldNotificArg); + break; + case RetrieveNotific: /* Localvalue 102 */ + dissect_h450_RetrieveNotificArg(argument_tvb, 0, pinfo , tree, hf_h4504_RetrieveNotificArg); + break; + case RemoteHold: /* Localvalue 103 */ + dissect_h450_RemoteHoldArg(argument_tvb, 0, pinfo , tree, hf_h4504_RemoteHoldArg); + break; + case RemoteRetrieve: /* Localvalue 104 */ + dissect_h450_RemoteRetrieveArg(argument_tvb, 0, pinfo , tree, hf_h4504_RemoteRetrieveArg); + break; + /* H.450.7 Message Waiting Indication */ + case MWIActivate: /* Localvalue 80 */ + dissect_h450_MWIActivateArg(argument_tvb, 0, pinfo , tree, hf_h4507_MWIActivateArg); + break; + case MWIDeactivate: /* Localvalue 81 */ + dissect_h450_MWIDeactivateArg(argument_tvb, 0, pinfo , tree, hf_h4507_MWIDeactivateArg); + break; + case MWIInterrogate: /* Localvalue 82 */ + dissect_h450_MWIInterrogateArg(argument_tvb, 0, pinfo , tree, hf_h4507_MWIInterrogateArg); + break; + + /* H.450.8 */ + case NIcallingName: /* Localvalue 0 */ + dissect_h450_CallingName(argument_tvb, 0, pinfo , tree, hf_h4508_CallingNameArg); + break; + case NIalertingName: /* Localvalue 1 */ + dissect_h450_AlertingName(argument_tvb, 0, pinfo , tree, hf_h4508_AlertingNameArg); + break; + case NIconnectedName: /* Localvalue 2 */ + dissect_h450_ConnectedName(argument_tvb, 0, pinfo , tree, hf_h4508_ConnectedNameArg); + break; + case NIbusyName: /* Localvalue 3 */ + dissect_h450_BusyName(argument_tvb, 0, pinfo , tree, hf_h4508_BusyNameArg); + 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 const per_sequence_t H4501_SupplementaryService_sequence[] = { - { "networkFacilityExtension", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4501_NetworkFacilityExtension }, - { "interpretationApdu", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL, - dissect_h4501_InterpretationApdu }, - { "serviceApdu", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, - dissect_h4501_ServiceApdus }, - { NULL, 0, 0, NULL } -}; -static void +} +static int dissect_h4501(tvbuff_t *tvb, packet_info *pinfo, proto_tree* tree) { proto_item *it; @@ -1155,28 +2457,20 @@ dissect_h4501(tvbuff_t *tvb, packet_info *pinfo, proto_tree* tree) 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); - offset=dissect_per_sequence(tvb, offset, pinfo, tr, hf_h4501, ett_h4501, H4501_SupplementaryService_sequence); + dissect_h450_H4501SupplementaryService(tvb, offset, pinfo, tr, hf_h4501); + return offset; + } +/*--- proto_register_h450 -------------------------------------------*/ +void proto_register_h450(void) { -void -proto_register_h4501(void) -{ - static hf_register_info hf[] = - { + /* List of fields */ + static hf_register_info hf[] = { { &hf_h4501, { "SupplementaryService", "h4501.SupplementaryService", FT_NONE, BASE_NONE, NULL, 0, "SupplementaryService sequence", HFILL }}, - { &hf_h4501_EntityType, - { "EntityType", "h4501.EntityType", FT_UINT32, BASE_DEC, - VALS(EntityType_vals), 0, "EntityType choice", HFILL }}, - { &hf_h4501_NetworkFacilityExtension, - { "NetworkFacilityExtension", "h4501.NetworkFacilityExtension", FT_NONE, BASE_NONE, - NULL, 0, "NetworkFacilityExtension sequence", HFILL }}, - { &hf_h4501_InterpretationApdu, - { "InterpretationApdu", "h4501.InterpretationApdu", FT_UINT32, BASE_DEC, - VALS(InterpretationApdu_vals), 0, "InterpretationApdu choice", HFILL }}, - { &hf_h4501_constrained_invokeId, + { &hf_h4501_constrained_invokeId, { "invokeId", "h4501.invokeId", FT_UINT32, BASE_DEC, NULL, 0, "invokeId", HFILL }}, { &hf_h4501_invokeId, @@ -1188,90 +2482,12 @@ proto_register_h4501(void) { &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_h4502_CallIdentity, - { "CallIdentity", "h4502.CallIdentity", FT_STRING, BASE_NONE, - NULL, 0, "CallIdentity", HFILL }}, - { &hf_h4501_destinationAddress, - { "destinationAddress", "h4501.destinationAddress", FT_NONE, BASE_NONE, - NULL, 0, "destinationAddress sequence of", HFILL }}, - { &hf_h4501_EndpointAddress, - { "EndpointAddress", "h4501.EndpointAddress", FT_NONE, BASE_NONE, - NULL, 0, "EndpointAddress sequence of", HFILL }}, - { &hf_h4501_H225InformationElement, - { "H225InformationElement", "h4501.H225InformationElement", FT_BYTES, BASE_HEX, - NULL, 0, "H225InformationElement", HFILL }}, - { &hf_h4502_nonStandardData, - { "nonStandardData", "h4502.nonStandardData", FT_NONE, BASE_NONE, - NULL, 0, "NonStandardParameter SEQUENCE", HFILL }}, - { &hf_h4502_DummyArg, - { "DummyArg", "h4502.DummyArg", FT_UINT32, BASE_DEC, - VALS(Extension_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_redirectionInfo, - { "redirectionInfo", "h4502.redirectionInfo", FT_STRING, BASE_HEX, - NULL, 0, "redirectionInfo BMPString", HFILL }}, - { &hf_h4502_CTUpdateArg, - { "CTUpdateArg", "h4502.CTUpdateArg", FT_NONE, BASE_NONE, - NULL, 0, "CTUpdateArg sequence of", HFILL }}, - { &hf_h4501_SubaddressInformation, - { "SubaddressInformation", "h4501.SubaddressInformation", FT_BYTES, BASE_HEX, - NULL, 0, "SubaddressInformation octet string", HFILL }}, - { &hf_h4501_oddCountIndicator, - { "oddCountIndicator", "h4501.oddCountIndicator", FT_BOOLEAN, 8, - TFS(&tfs_oddCountIndicator_bit), 0x01, "The oddCountIndicator bit", HFILL }}, - { &hf_h4501_UserSpecifiedSubaddress, - { "UserSpecifiedSubaddress", "h4501.UserSpecifiedSubaddress", FT_NONE, BASE_NONE, - NULL, 0, "UserSpecifiedSubaddress sequence of", HFILL }}, - { &hf_h4501_NSAPAddress, - { "NSAPAddress", "h4501.NSAPAddress", FT_BYTES, BASE_HEX, - NULL, 0, "NSAPAddress octet string", HFILL }}, - { &hf_h4501_PartySubaddress, - { "PartySubaddress", "h4501.PartySubaddress", FT_UINT32, BASE_DEC, - VALS(PartySubaddress_vals), 0, "PartySubaddress choice", HFILL }}, - { &hf_h4502_SubaddressTransferArg, - { "SubaddressTransferArg", "h4502.SubaddressTransferArg", FT_NONE, BASE_NONE, - NULL, 0, "SubaddressTransferArg sequence of", HFILL }}, - { &hf_h4502_EndDesignation, - { "EndDesignation", "h4502.EndDesignation", FT_UINT32, BASE_DEC, - VALS(EndDesignation_vals), 0, "EndDesignation", HFILL }}, - { &hf_h4502_CallStatus, - { "CallStatus", "h4502.CallStatus", FT_UINT32, BASE_DEC, - VALS(CallStatus_vals), 0, "CallStatus", HFILL }}, - { &hf_h4502_CTCompleteArg, - { "CTCompleteArg", "h4502.CTCompleteArg", FT_NONE, BASE_NONE, - NULL, 0, "CTCompleteArg sequence of", HFILL }}, - { &hf_h4502_connectedInfo, - { "connectedInfo", "h4502.connectedInfo", FT_STRING, BASE_HEX, - NULL, 0, "connectedInfo BMPString", HFILL }}, - { &hf_h4502_CTActiveArg, - { "CTActiveArg", "h4502.CTActiveArg", FT_NONE, BASE_NONE, - NULL, 0, "CTActiveArg sequence of", HFILL }}, - { &hf_h4501_argumentExtension, - { "argumentExtension", "h4501.argumentExtension", FT_UINT32, BASE_DEC, - VALS(Extension_vals), 0, "argumentExtension choice", HFILL }}, - { &hf_h4501_argument, - { "argument", "h4501.argument", FT_BYTES, BASE_HEX, - NULL, 0, "argument", 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(Extension_vals), 0, "DummyRes Choice", HFILL }}, - { &hf_h4501_resultExtension, - { "resultExtension", "h4501.resultExtension", FT_UINT32, BASE_DEC, - VALS(Extension_vals), 0, "resultExtension choice", HFILL }}, { &hf_h4501_ReturnResult_result, { "result", "h4501.ReturnResult.result", FT_BYTES, BASE_HEX, NULL, 0, "result", HFILL }}, @@ -1314,56 +2530,512 @@ proto_register_h4501(void) { &hf_h4501_ROS, { "ROS", "h4501.ROS", FT_UINT32, BASE_DEC, VALS(ROS_vals), 0, "ROS choice", HFILL }}, - { &hf_h4501_rosApdus, - { "rosApdus", "h4501.rosApdus", FT_NONE, BASE_NONE, - NULL, 0, "rosApdus sequence of", HFILL }}, - { &hf_h4501_ServiceApdus, - { "ServiceApdus", "h4501.ServiceApdus", FT_UINT32, BASE_DEC, - VALS(ServiceApdus_vals), 0, "ServiceApdus choice", HFILL }} - }; + { &hf_h4501_Invoke, + { "Invoke", "h4501.Invoke", FT_NONE, BASE_NONE, + NULL, 0, "Invoke sequence of", HFILL }}, - static gint *ett[] = - { - &ett_h4501, - &ett_h4501_EntityType, - &ett_h4501_NetworkFacilityExtension, - &ett_h4501_InterpretationApdu, - &ett_h4501_opcode, - &ett_h4501_destinationAddress, - &ett_h4501_EndpointAddress, - &ett_h4501_PartySubaddress, - &ett_h4501_argumentExtension, - &ett_h4501_Invoke, - &ett_h4501_resultExtension, - &ett_h4501_result, - &ett_h4501_ReturnResult, - &ett_h4501_errorCode, - &ett_h4501_ReturnError, - &ett_h4501_problem, - &ett_h4501_Reject, - &ett_h4501_ROS, - &ett_h4501_rosApdus, - &ett_h4501_ServiceApdus, + { &hf_h4502_CTActiveArg, + { "CTActiveArg", "h4502.CTActiveArg", FT_NONE, BASE_NONE, + NULL, 0, "CTActiveArg sequence of", HFILL }}, + { &hf_h4502_CTCompleteArg, + { "CTCompleteArg", "h4502.CTCompleteArg", FT_NONE, BASE_NONE, + NULL, 0, "CTCompleteArg 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 }}, + + { &hf_h4504_HoldNotificArg, + { "HoldNotificArg", "h4504.HoldNotificArg", FT_NONE, BASE_NONE, + NULL, 0, "HoldNotificArg sequence of", HFILL }}, + { &hf_h4504_RetrieveNotificArg, + { "RetrieveNotificArg", "h4504.RetrieveNotificArg", FT_NONE, BASE_NONE, + NULL, 0, "RetrieveNotificArg sequence of", HFILL }}, + { &hf_h4504_RemoteHoldArg, + { "RemoteHoldArg", "h4504.RemoteHoldArg", FT_NONE, BASE_NONE, + NULL, 0, "RemoteHoldArg sequence of", HFILL }}, + { &hf_h4504_RemoteRetrieveArg, + { "RemoteRetrieveArg", "h4504.RemoteRetrieveArg", FT_NONE, BASE_NONE, + NULL, 0, "RemoteRetrieveArg sequence of", HFILL }}, + { &hf_h4504_RemoteRetrieveRes, + { "RemoteRetrieveRes", "h4504.RemoteRetrieveRes", FT_NONE, BASE_NONE, + NULL, 0, "RemoteRetrieveRes sequence of", HFILL }}, + + { &hf_h4507_MWIActivateArg, + { "MWIActivateArg", "h4507.MWIActivateArg", FT_NONE, BASE_NONE, + NULL, 0, "MWIActivateArg sequence of", HFILL }}, + { &hf_h4507_MwiDummyRes, + { "MwiDummyRes", "h4507.MwiDummyRes", FT_NONE, BASE_NONE, + NULL, 0, "MwiDummyRes sequence of", HFILL }}, + { &hf_h4507_MWIDeactivateArg, + { "MWIDeactivateArg", "h4507.MWIDeactivateArg", FT_NONE, BASE_NONE, + NULL, 0, "MWIDeactivateArg sequence of", HFILL }}, + { &hf_h4507_MWIInterrogateArg, + { "MWIInterrogateArg", "h4507.MWIInterrogateArg", FT_NONE, BASE_NONE, + NULL, 0, "MWIInterrogateArg sequence of", HFILL }}, + { &hf_h4507_MWIInterrogateRes, + { "MWIInterrogateRes", "h4507.MWIInterrogateRes", FT_NONE, BASE_NONE, + NULL, 0, "MWIInterrogateRes sequence of", HFILL }}, + + { &hf_h4508_CallingNameArg, + { "CallingNameArg", "h4508.CallingNameArg", FT_NONE, BASE_NONE, + NULL, 0, "CallingNameArg sequence of", HFILL }}, + { &hf_h4508_AlertingNameArg, + { "AlertingNameArg", "h4508.AlertingNameArg", FT_NONE, BASE_NONE, + NULL, 0, "AlertingNameArg sequence of", HFILL }}, + { &hf_h4508_ConnectedNameArg, + { "ConnectedNameArg", "h4508.ConnectedNameArg", FT_NONE, BASE_NONE, + NULL, 0, "ConnectedNameArg sequence of", HFILL }}, + { &hf_h4508_BusyNameArg, + { "BusyNameArg", "h4508.BusyNameArg", FT_NONE, BASE_NONE, + NULL, 0, "BusyNameArg sequence of", HFILL }}, + + +/*--- Included file: packet-h450-hfarr.c ---*/ + + { &hf_h450_networkFacilityExtension, + { "networkFacilityExtension", "h450.networkFacilityExtension", + FT_NONE, BASE_NONE, NULL, 0, + "H4501SupplementaryService/networkFacilityExtension", HFILL }}, + { &hf_h450_interpretationApdu, + { "interpretationApdu", "h450.interpretationApdu", + FT_UINT32, BASE_DEC, VALS(h450_InterpretationApdu_vals), 0, + "H4501SupplementaryService/interpretationApdu", HFILL }}, + { &hf_h450_serviceApdu, + { "serviceApdu", "h450.serviceApdu", + FT_UINT32, BASE_DEC, VALS(h450_ServiceApdus_vals), 0, + "H4501SupplementaryService/serviceApdu", HFILL }}, + { &hf_h450_sourceEntity, + { "sourceEntity", "h450.sourceEntity", + FT_UINT32, BASE_DEC, VALS(h450_EntityType_vals), 0, + "NetworkFacilityExtension/sourceEntity", HFILL }}, + { &hf_h450_sourceEntityAddress, + { "sourceEntityAddress", "h450.sourceEntityAddress", + FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0, + "NetworkFacilityExtension/sourceEntityAddress", HFILL }}, + { &hf_h450_destinationEntity, + { "destinationEntity", "h450.destinationEntity", + FT_UINT32, BASE_DEC, VALS(h450_EntityType_vals), 0, + "NetworkFacilityExtension/destinationEntity", HFILL }}, + { &hf_h450_destinationEntityAddress, + { "destinationEntityAddress", "h450.destinationEntityAddress", + FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0, + "NetworkFacilityExtension/destinationEntityAddress", HFILL }}, + { &hf_h450_endpoint, + { "endpoint", "h450.endpoint", + FT_NONE, BASE_NONE, NULL, 0, + "EntityType/endpoint", HFILL }}, + { &hf_h450_anyEntity, + { "anyEntity", "h450.anyEntity", + FT_NONE, BASE_NONE, NULL, 0, + "EntityType/anyEntity", HFILL }}, + { &hf_h450_discardAnyUnrecognizedInvokePdu, + { "discardAnyUnrecognizedInvokePdu", "h450.discardAnyUnrecognizedInvokePdu", + FT_NONE, BASE_NONE, NULL, 0, + "InterpretationApdu/discardAnyUnrecognizedInvokePdu", HFILL }}, + { &hf_h450_clearCallIfAnyInvokePduNotRecognized, + { "clearCallIfAnyInvokePduNotRecognized", "h450.clearCallIfAnyInvokePduNotRecognized", + FT_NONE, BASE_NONE, NULL, 0, + "InterpretationApdu/clearCallIfAnyInvokePduNotRecognized", HFILL }}, + { &hf_h450_rejectAnyUnrecognizedInvokePdu, + { "rejectAnyUnrecognizedInvokePdu", "h450.rejectAnyUnrecognizedInvokePdu", + FT_NONE, BASE_NONE, NULL, 0, + "InterpretationApdu/rejectAnyUnrecognizedInvokePdu", HFILL }}, + { &hf_h450_rosApdus, + { "rosApdus", "h450.rosApdus", + FT_NONE, BASE_NONE, NULL, 0, + "ServiceApdus/rosApdus", HFILL }}, + { &hf_h450_rosApdus_item, + { "Item", "h450.rosApdus_item", + FT_NONE, BASE_NONE, NULL, 0, + "ServiceApdus/rosApdus/_item", HFILL }}, + { &hf_h450_addressScreened_presentationAllowedAddress, + { "presentationAllowedAddress", "h450.presentationAllowedAddress", + FT_NONE, BASE_NONE, NULL, 0, + "PresentedAddressScreened/presentationAllowedAddress", HFILL }}, + { &hf_h450_presentationRestricted, + { "presentationRestricted", "h450.presentationRestricted", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_h450_numberNotAvailableDueToInterworking, + { "numberNotAvailableDueToInterworking", "h450.numberNotAvailableDueToInterworking", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_h450_addressScreened_presentationRestrictedAddress, + { "presentationRestrictedAddress", "h450.presentationRestrictedAddress", + FT_NONE, BASE_NONE, NULL, 0, + "PresentedAddressScreened/presentationRestrictedAddress", HFILL }}, + { &hf_h450_addressUnscreened_presentationAllowedAddress, + { "presentationAllowedAddress", "h450.presentationAllowedAddress", + FT_NONE, BASE_NONE, NULL, 0, + "PresentedAddressUnscreened/presentationAllowedAddress", HFILL }}, + { &hf_h450_addressUnscreened_presentationRestrictedAddress, + { "presentationRestrictedAddress", "h450.presentationRestrictedAddress", + FT_NONE, BASE_NONE, NULL, 0, + "PresentedAddressUnscreened/presentationRestrictedAddress", HFILL }}, + { &hf_h450_numberScreened_presentationAllowedAddress, + { "presentationAllowedAddress", "h450.presentationAllowedAddress", + FT_NONE, BASE_NONE, NULL, 0, + "PresentedNumberScreened/presentationAllowedAddress", HFILL }}, + { &hf_h450_numberScreened_presentationRestrictedAddress, + { "presentationRestrictedAddress", "h450.presentationRestrictedAddress", + FT_NONE, BASE_NONE, NULL, 0, + "PresentedNumberScreened/presentationRestrictedAddress", HFILL }}, + { &hf_h450_numberUnscreened_presentationAllowedAddress, + { "presentationAllowedAddress", "h450.presentationAllowedAddress", + FT_UINT32, BASE_DEC, VALS(h225_PartyNumber_vals), 0, + "PresentedNumberUnscreened/presentationAllowedAddress", HFILL }}, + { &hf_h450_numberUnscreened_presentationRestrictedAddress, + { "presentationRestrictedAddress", "h450.presentationRestrictedAddress", + FT_UINT32, BASE_DEC, VALS(h225_PartyNumber_vals), 0, + "PresentedNumberUnscreened/presentationRestrictedAddress", HFILL }}, + { &hf_h450_partyNumber, + { "partyNumber", "h450.partyNumber", + FT_UINT32, BASE_DEC, VALS(h225_PartyNumber_vals), 0, + "", HFILL }}, + { &hf_h450_screeningIndicator, + { "screeningIndicator", "h450.screeningIndicator", + FT_UINT32, BASE_DEC, VALS(h225_ScreeningIndicator_vals), 0, + "", HFILL }}, + { &hf_h450_partySubaddress, + { "partySubaddress", "h450.partySubaddress", + FT_UINT32, BASE_DEC, VALS(h450_PartySubaddress_vals), 0, + "", HFILL }}, + { &hf_h450_destinationAddress, + { "destinationAddress", "h450.destinationAddress", + FT_NONE, BASE_NONE, NULL, 0, + "EndpointAddress/destinationAddress", HFILL }}, + { &hf_h450_destinationAddress_item, + { "Item", "h450.destinationAddress_item", + FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0, + "EndpointAddress/destinationAddress/_item", HFILL }}, + { &hf_h450_remoteExtensionAddress, + { "remoteExtensionAddress", "h450.remoteExtensionAddress", + FT_UINT32, BASE_DEC, VALS(AliasAddress_vals), 0, + "EndpointAddress/remoteExtensionAddress", HFILL }}, + { &hf_h450_destinationAddressPresentationIndicator, + { "destinationAddressPresentationIndicator", "h450.destinationAddressPresentationIndicator", + FT_UINT32, BASE_DEC, VALS(h225_PresentationIndicator_vals), 0, + "EndpointAddress/destinationAddressPresentationIndicator", HFILL }}, + { &hf_h450_destinationAddressScreeningIndicator, + { "destinationAddressScreeningIndicator", "h450.destinationAddressScreeningIndicator", + FT_UINT32, BASE_DEC, VALS(h225_ScreeningIndicator_vals), 0, + "EndpointAddress/destinationAddressScreeningIndicator", HFILL }}, + { &hf_h450_remoteExtensionAddressPresentationIndicator, + { "remoteExtensionAddressPresentationIndicator", "h450.remoteExtensionAddressPresentationIndicator", + FT_UINT32, BASE_DEC, VALS(h225_PresentationIndicator_vals), 0, + "EndpointAddress/remoteExtensionAddressPresentationIndicator", HFILL }}, + { &hf_h450_remoteExtensionAddressScreeningIndicator, + { "remoteExtensionAddressScreeningIndicator", "h450.remoteExtensionAddressScreeningIndicator", + FT_UINT32, BASE_DEC, VALS(h225_ScreeningIndicator_vals), 0, + "EndpointAddress/remoteExtensionAddressScreeningIndicator", HFILL }}, + { &hf_h450_userSpecifiedSubaddress, + { "userSpecifiedSubaddress", "h450.userSpecifiedSubaddress", + FT_NONE, BASE_NONE, NULL, 0, + "PartySubaddress/userSpecifiedSubaddress", HFILL }}, + { &hf_h450_nsapSubaddress, + { "nsapSubaddress", "h450.nsapSubaddress", + FT_BYTES, BASE_HEX, NULL, 0, + "PartySubaddress/nsapSubaddress", HFILL }}, + { &hf_h450_subaddressInformation, + { "subaddressInformation", "h450.subaddressInformation", + FT_BYTES, BASE_HEX, NULL, 0, + "UserSpecifiedSubaddress/subaddressInformation", HFILL }}, + { &hf_h450_oddCountIndicator, + { "oddCountIndicator", "h450.oddCountIndicator", + FT_BOOLEAN, 8, NULL, 0, + "UserSpecifiedSubaddress/oddCountIndicator", HFILL }}, + { &hf_h450_extensionSeq, + { "extensionSeq", "h450.extensionSeq", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_h450_nonStandardData, + { "nonStandardData", "h450.nonStandardData", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_h450_callIdentity, + { "callIdentity", "h450.callIdentity", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_h450_reroutingNumber, + { "reroutingNumber", "h450.reroutingNumber", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_h450_argumentExtension, + { "argumentExtension", "h450.argumentExtension", + FT_UINT32, BASE_DEC, VALS(h450_ArgumentExtension_vals), 0, + "", HFILL }}, + { &hf_h450_transferringNumber, + { "transferringNumber", "h450.transferringNumber", + FT_NONE, BASE_NONE, NULL, 0, + "CTSetupArg/transferringNumber", HFILL }}, + { &hf_h450_resultExtension, + { "resultExtension", "h450.resultExtension", + FT_UINT32, BASE_DEC, VALS(h450_T_resultExtension_vals), 0, + "CTIdentifyRes/resultExtension", HFILL }}, + { &hf_h450_redirectionNumber, + { "redirectionNumber", "h450.redirectionNumber", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_h450_redirectionInfo, + { "redirectionInfo", "h450.redirectionInfo", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_h450_basicCallInfoElements, + { "basicCallInfoElements", "h450.basicCallInfoElements", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_h450_redirectionSubaddress, + { "redirectionSubaddress", "h450.redirectionSubaddress", + FT_UINT32, BASE_DEC, VALS(h450_PartySubaddress_vals), 0, + "SubaddressTransferArg/redirectionSubaddress", HFILL }}, + { &hf_h450_endDesignation, + { "endDesignation", "h450.endDesignation", + FT_UINT32, BASE_DEC, VALS(h450_EndDesignation_vals), 0, + "CTCompleteArg/endDesignation", HFILL }}, + { &hf_h450_callStatus, + { "callStatus", "h450.callStatus", + FT_UINT32, BASE_DEC, VALS(h450_CallStatus_vals), 0, + "CTCompleteArg/callStatus", HFILL }}, + { &hf_h450_connectedAddress, + { "connectedAddress", "h450.connectedAddress", + FT_NONE, BASE_NONE, NULL, 0, + "CTActiveArg/connectedAddress", HFILL }}, + { &hf_h450_connectedInfo, + { "connectedInfo", "h450.connectedInfo", + FT_STRING, BASE_NONE, NULL, 0, + "CTActiveArg/connectedInfo", HFILL }}, + { &hf_h450_ExtensionSeq_item, + { "Item", "h450.ExtensionSeq_item", + FT_NONE, BASE_NONE, NULL, 0, + "ExtensionSeq/_item", HFILL }}, + { &hf_h450_extensionArg, + { "extensionArg", "h450.extensionArg", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_h450_ExtensionArg_item, + { "Item", "h450.ExtensionArg_item", + FT_UINT32, BASE_DEC, VALS(h450_MixedExtension_vals), 0, + "ExtensionArg/_item", HFILL }}, + { &hf_h450_extensionRes, + { "extensionRes", "h450.extensionRes", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_h450_extensionRes_item, + { "Item", "h450.extensionRes_item", + FT_UINT32, BASE_DEC, VALS(h450_MixedExtension_vals), 0, + "", HFILL }}, + { &hf_h450_extension, + { "extension", "h450.extension", + FT_NONE, BASE_NONE, NULL, 0, + "MixedExtension/extension", HFILL }}, + { &hf_h450_servedUserNr, + { "servedUserNr", "h450.servedUserNr", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_h450_basicService, + { "basicService", "h450.basicService", + FT_UINT32, BASE_DEC, VALS(h450_BasicService_vals), 0, + "", HFILL }}, + { &hf_h450_msgCentreId, + { "msgCentreId", "h450.msgCentreId", + FT_UINT32, BASE_DEC, VALS(h450_MsgCentreId_vals), 0, + "", HFILL }}, + { &hf_h450_nbOfMessages, + { "nbOfMessages", "h450.nbOfMessages", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_h450_originatingNr, + { "originatingNr", "h450.originatingNr", + FT_NONE, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_h450_timestamp, + { "timestamp", "h450.timestamp", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_h450_priority, + { "priority", "h450.priority", + FT_UINT32, BASE_DEC, NULL, 0, + "", HFILL }}, + { &hf_h450_MwiDummyRes_item, + { "Item", "h450.MwiDummyRes_item", + FT_UINT32, BASE_DEC, VALS(h450_MixedExtension_vals), 0, + "MwiDummyRes/_item", HFILL }}, + { &hf_h450_callbackReq, + { "callbackReq", "h450.callbackReq", + FT_BOOLEAN, 8, NULL, 0, + "", HFILL }}, + { &hf_h450_MWIInterrogateRes_item, + { "Item", "h450.MWIInterrogateRes_item", + FT_NONE, BASE_NONE, NULL, 0, + "MWIInterrogateRes/_item", HFILL }}, + { &hf_h450_integer, + { "integer", "h450.integer", + FT_UINT32, BASE_DEC, NULL, 0, + "MsgCentreId/integer", HFILL }}, + { &hf_h450_mwipartyNumber, + { "mwipartyNumber", "h450.mwipartyNumber", + FT_NONE, BASE_NONE, NULL, 0, + "MsgCentreId/mwipartyNumber", HFILL }}, + { &hf_h450_numericString, + { "numericString", "h450.numericString", + FT_STRING, BASE_NONE, NULL, 0, + "MsgCentreId/numericString", HFILL }}, + { &hf_h450_name, + { "name", "h450.name", + FT_UINT32, BASE_DEC, VALS(h450_Name_vals), 0, + "", HFILL }}, + { &hf_h450_namePresentationAllowed, + { "namePresentationAllowed", "h450.namePresentationAllowed", + FT_UINT32, BASE_DEC, VALS(h450_NamePresentationAllowed_vals), 0, + "Name/namePresentationAllowed", HFILL }}, + { &hf_h450_namePresentationRestricted, + { "namePresentationRestricted", "h450.namePresentationRestricted", + FT_UINT32, BASE_DEC, VALS(h450_NamePresentationRestricted_vals), 0, + "Name/namePresentationRestricted", HFILL }}, + { &hf_h450_nameNotAvailable, + { "nameNotAvailable", "h450.nameNotAvailable", + FT_NONE, BASE_NONE, NULL, 0, + "Name/nameNotAvailable", HFILL }}, + { &hf_h450_simpleName, + { "simpleName", "h450.simpleName", + FT_BYTES, BASE_HEX, NULL, 0, + "", HFILL }}, + { &hf_h450_extendedName, + { "extendedName", "h450.extendedName", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_h450_restrictedNull, + { "restrictedNull", "h450.restrictedNull", + FT_NONE, BASE_NONE, NULL, 0, + "NamePresentationRestricted/restrictedNull", HFILL }}, + { &hf_h450_extension1, + { "extension", "h450.extension", + FT_NONE, BASE_NONE, NULL, 0, + "Unspecified/extension", HFILL }}, + { &hf_h450_nonStandard, + { "nonStandard", "h450.nonStandard", + FT_NONE, BASE_NONE, NULL, 0, + "Unspecified/nonStandard", HFILL }}, + +/*--- End of included file: 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, + +/*--- Included file: packet-h450-ettarr.c ---*/ + + &ett_h450_H4501SupplementaryService, + &ett_h450_NetworkFacilityExtension, + &ett_h450_EntityType, + &ett_h450_InterpretationApdu, + &ett_h450_ServiceApdus, + &ett_h450_SEQUNCE_OF_ROSxxx, + &ett_h450_PresentedAddressScreened, + &ett_h450_PresentedAddressUnscreened, + &ett_h450_PresentedNumberScreened, + &ett_h450_PresentedNumberUnscreened, + &ett_h450_AddressScreened, + &ett_h450_NumberScreened, + &ett_h450_Address, + &ett_h450_EndpointAddress, + &ett_h450_SEQUNCE_OF_AliasAddress, + &ett_h450_PartySubaddress, + &ett_h450_UserSpecifiedSubaddress, + &ett_h450_DummyArg, + &ett_h450_DummyRes, + &ett_h450_CTInitiateArg, + &ett_h450_ArgumentExtension, + &ett_h450_CTSetupArg, + &ett_h450_CTIdentifyRes, + &ett_h450_T_resultExtension, + &ett_h450_CTUpdateArg, + &ett_h450_SubaddressTransferArg, + &ett_h450_CTCompleteArg, + &ett_h450_CTActiveArg, + &ett_h450_ExtensionSeq, + &ett_h450_HoldNotificArg, + &ett_h450_ExtensionArg, + &ett_h450_RetrieveNotificArg, + &ett_h450_RemoteHoldArg, + &ett_h450_RemoteHoldRes, + &ett_h450_SEQUNCE_SIZE_0_255_OF_MixedExtension, + &ett_h450_RemoteRetrieveArg, + &ett_h450_RemoteRetrieveRes, + &ett_h450_MixedExtension, + &ett_h450_MWIActivateArg, + &ett_h450_MwiDummyRes, + &ett_h450_MWIDeactivateArg, + &ett_h450_MWIInterrogateArg, + &ett_h450_MWIInterrogateRes, + &ett_h450_MWIInterrogateResElt, + &ett_h450_MsgCentreId, + &ett_h450_CallingName, + &ett_h450_AlertingName, + &ett_h450_ConnectedName, + &ett_h450_BusyName, + &ett_h450_Name, + &ett_h450_NamePresentationAllowed, + &ett_h450_NamePresentationRestricted, + &ett_h450_Unspecified, + +/*--- End of included file: 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); - &ett_h4502_DummyArg, - &ett_h4502_CTInitiateArg, - &ett_h4502_CTSetupArg, - &ett_h4502_CTUpdateArg, - &ett_h4502_SubaddressTransferArg, - &ett_h4502_CTCompleteArg, - &ett_h4502_CTActiveArg, - &ett_h4502_CTIdentifyRes, - &ett_h4502_DummyRes - }; - proto_h4501 = proto_register_protocol("H4501", "H4501", "h4501"); - 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=create_dissector_handle(dissect_h4501, proto_h4501); + + h4501_handle = find_dissector("h4501"); + } + + + + diff --git a/epan/dissectors/packet-h450.h b/epan/dissectors/packet-h450.h new file mode 100644 index 0000000000..8f2f90d1c4 --- /dev/null +++ b/epan/dissectors/packet-h450.h @@ -0,0 +1,42 @@ +/* Do not modify this file. */ +/* It is created automatically by the ASN.1 to Ethereal dissector compiler */ +/* .\packet-h450.h */ +/* ../../tools/asn2eth.py -X -e -p h450 -c h450.cnf -s packet-h450-template h4501.asn */ + +/* Input file: packet-h450-template.h */ + +/* packet-h450.h + * Routines for h450 packet dissection + * Copyright 2005, Anders Broman + * + * $Id$ + * + * Ethereal - Network traffic analyzer + * By Gerald Combs + * 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 */ + +