diff options
author | Anders Broman <anders.broman@ericsson.com> | 2005-08-03 20:49:52 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2005-08-03 20:49:52 +0000 |
commit | 92588a098fa337aed646486da94c10136dd88380 (patch) | |
tree | b82c8c800e1a4c948ba9718e5c2b67ca88ae1319 /asn1 | |
parent | 32f826a7cea1a6b72d1eea03866274fc39b59580 (diff) | |
download | wireshark-92588a098fa337aed646486da94c10136dd88380.tar.gz |
First checkin of asn2eth generated gsm ss dissector - work in progress not ready to replace the existing
dissector yet.
svn path=/trunk/; revision=15202
Diffstat (limited to 'asn1')
-rw-r--r-- | asn1/gsm_ss/Makefile.nmake | 41 | ||||
-rw-r--r-- | asn1/gsm_ss/SS-Operations.asn | 543 | ||||
-rw-r--r-- | asn1/gsm_ss/gsm_ss.cnf | 50 | ||||
-rw-r--r-- | asn1/gsm_ss/packet-gsm_ss-template.c | 410 | ||||
-rw-r--r-- | asn1/gsm_ss/packet-gsm_ss-template.h | 42 |
5 files changed, 1086 insertions, 0 deletions
diff --git a/asn1/gsm_ss/Makefile.nmake b/asn1/gsm_ss/Makefile.nmake new file mode 100644 index 0000000000..265fe10bc1 --- /dev/null +++ b/asn1/gsm_ss/Makefile.nmake @@ -0,0 +1,41 @@ +## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake +# +# $Id$ + +include ../../config.nmake + +UNIX2DOS=$(PERL) ../../tools/unix2dos.pl + +PROTOCOL_NAME=gsm_ss +DISSECTOR_FILES=packet-$(PROTOCOL_NAME).c packet-$(PROTOCOL_NAME).h + +all: generate_dissector + +generate_dissector: $(DISSECTOR_FILES) + +$(DISSECTOR_FILES): ../../tools/asn2eth.py SS-Operations.asn packet-$(PROTOCOL_NAME)-template.c packet-$(PROTOCOL_NAME)-template.h gsm_ss.cnf +!IFDEF PYTHON + $(PYTHON) ../../tools/asn2eth.py -X -b -e -p $(PROTOCOL_NAME) -c gsm_ss.cnf -s packet-$(PROTOCOL_NAME)-template SS-Operations.asn +!ELSE + @echo Error: You need Python to use asn2eth.py + @exit 1 +!ENDIF + +clean: + rm -f parsetab.py $(DISSECTOR_FILES) + +# Fix EOL in generated dissectors. Cygwin's python generates files with +# mixed EOL styles, which can't be commited to the SVN repository. +# Stuff included from template and "cnf" files has "\r\n" on windows, while +# the generated stuff has "\n". + +fix_eol: generate_dissector + move packet-$(PROTOCOL_NAME).c packet-$(PROTOCOL_NAME).c.tmp + move packet-$(PROTOCOL_NAME).h packet-$(PROTOCOL_NAME).h.tmp + $(UNIX2DOS) < packet-$(PROTOCOL_NAME).c.tmp > packet-$(PROTOCOL_NAME).c + $(UNIX2DOS) < packet-$(PROTOCOL_NAME).h.tmp > packet-$(PROTOCOL_NAME).h + del /f packet-$(PROTOCOL_NAME).c.tmp packet-$(PROTOCOL_NAME).h.tmp + +copy_files: generate_dissector fix_eol + xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d /y + xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d /y diff --git a/asn1/gsm_ss/SS-Operations.asn b/asn1/gsm_ss/SS-Operations.asn new file mode 100644 index 0000000000..883aadb75d --- /dev/null +++ b/asn1/gsm_ss/SS-Operations.asn @@ -0,0 +1,543 @@ +-- Expanded ASN1 Module 'SS-Operations' +--SIEMENS ASN.1 Compiler R5.70 (Production_5.70) +-- Date: 2004-03-19 Time: 12:34:55 + +SS-Operations{ 0 identified-organization (4) etsi (0) mobileDomain (0) gsm-Access (2) modules (3) ss-Operations (0) version9 (9) } + +DEFINITIONS + +::= + +BEGIN + +EXPORTS + processUnstructuredSS-Data, + notifySS, + forwardChargeAdvice, + forwardCUG-Info, + buildMPTY, + holdMPTY, + retrieveMPTY, + splitMPTY, + explicitCT, + accessRegisterCCEntry, + callDeflection, + userUserService, + lcs-LocationNotification, + lcs-MOLR, + lcs-AreaEventRequest, + lcs-AreaEventReport, + lcs-AreaEventCancellation; + +IMPORTS + + SS-Code, + SS-Status, + CUG-Index, + CCBS-Feature, + AlertingPattern, + USSD-DataCodingScheme, + USSD-String, + ISDN-AddressString, + ISDN-SubaddressString, + AddressString, + NotificationToMSUser, + LocationType, + LCSClientExternalID, + LCSClientName, + LCSRequestorID, + LCSCodeword, + LCSServiceTypeID, + LCS-QoS, + SupportedGADShapes, + AgeOfLocationInformation, + Ext-GeographicalInformation, + Add-GeographicalInformation, + LCS-ReferenceNumber, + GSN-Address, + DeferredLocationEventType, + AreaEventInfo + + FROM MAP-Protocol{ 0 identified-organization (4) etsi (0) mobileDomain (0) gsm-Network (1) modules (3) map-Protocol (4) version5 (5) } + ; + + + +-- processUnstructuredSS-Data OPERATION ::= { +-- ARGUMENT IA5String ( SIZE( 1 .. 200 ) ) +-- RESULT IA5String ( SIZE( 1 .. 200 ) ) +-- ERRORS { +-- systemFailure | +-- unexpectedDataValue } +-- CODE local : 19 +-- } +SS-UserData ::= IA5String (SIZE (1.. 200)) + +-- notifySS OPERATION ::= { +-- ARGUMENT SEQUENCE { +NotifySS-Arg ::= SEQUENCE{ + ss-Code [1] SS-Code OPTIONAL, + ss-Status [4] SS-Status OPTIONAL, + ss-Notification [5] SS-Notification OPTIONAL, + callIsWaiting-Indicator [14] NULL OPTIONAL, + callOnHold-Indicator [15] CallOnHold-Indicator OPTIONAL, + mpty-Indicator [16] NULL OPTIONAL, + cug-Index [17] CUG-Index OPTIONAL, + clirSuppressionRejected [18] NULL OPTIONAL, + ... , + ect-Indicator [19] ECT-Indicator OPTIONAL, + nameIndicator [20] NameIndicator OPTIONAL, + ccbs-Feature [21] CCBS-Feature OPTIONAL, + alertingPattern [22] AlertingPattern OPTIONAL, + multicall-Indicator [23] Multicall-Indicator OPTIONAL} +-- CODE local : 16 +-- } +-- The nameIndicator is defined because of CNAP. + +Multicall-Indicator ::= ENUMERATED { + nbr-SNexceeded (0), + nbr-Userexceeded (1)} + +--forwardChargeAdvice OPERATION ::= { +-- ARGUMENT SEQUENCE { +ForwardChargeAdviceArg ::= SEQUENCE{ + ss-Code [0] SS-Code, + chargingInformation [1] ChargingInformation, + ...} + +-- RETURN RESULT TRUE +-- CODE local : 125 +-- } + +SS-Notification ::= OCTET STRING (SIZE (1)) +-- Bit 8 7 6 5 4 00000 (Unused) +-- Bit 3 Call is forwarded indication to A-subscriber +-- (calling subscriber) +-- 0 No information content +-- 1 Outgoing call has been forwarded to C +-- Bit 2 Call is forwarded indication to B-subscriber +-- (forwarding subscriber) +-- 0 No information content +-- 1 Incoming call has been forwarded to C +-- Bit 1 Call is forwarded indication to C-subscriber +-- (forwarded-to subscriber) +-- 0 No information content +-- 1 Incoming call is a forwarded call + +ChargingInformation ::= SEQUENCE{ + e1 [1] E1 OPTIONAL, + e2 [2] E2 OPTIONAL, + e3 [3] E3 OPTIONAL, + e4 [4] E4 OPTIONAL, + e5 [5] E5 OPTIONAL, + e6 [6] E6 OPTIONAL, + e7 [7] E7 OPTIONAL, +...} + +E1 ::= INTEGER (0..max10TimesUnitsPerTime) + +max10TimesUnitsPerTime INTEGER ::= 8191 + +E2 ::= INTEGER (0..max10TimesTimeInterval) + +max10TimesTimeInterval INTEGER ::= 8191 + +E3 ::= INTEGER (0..max100TimesScalingFactor) + +max100TimesScalingFactor INTEGER ::= 8191 + +E4 ::= INTEGER (0..max10TimesIncrement) + +max10TimesIncrement INTEGER ::= 8191 + +E5 ::= INTEGER (0..max10TimesIncrementPerDataInterval) + +max10TimesIncrementPerDataInterval INTEGER ::= 8191 + +E6 ::= INTEGER (0..maxNumberOfSegmentsPerDataInterval) + +maxNumberOfSegmentsPerDataInterval INTEGER ::= 8191 + +E7 ::= INTEGER (0..max10TimesInitialTime) + +max10TimesInitialTime INTEGER ::= 8191 + +CallOnHold-Indicator ::= ENUMERATED { + callRetrieved (0), + callOnHold (1)} + +-- forwardCUG-Info OPERATION ::= { +-- ARGUMENT SEQUENCE { +ForwardCUG-InfoArg ::= SEQUENCE { + cug-Index [0] CUG-Index OPTIONAL, + suppressPrefCUG [1] NULL OPTIONAL, + suppressOA [2] NULL OPTIONAL, +...} +-- CODE local : 120 +-- } + + +ECT-Indicator ::= SEQUENCE { + ect-CallState [0] ECT-CallState, + rdn [1] RDN OPTIONAL, + ...} + +ECT-CallState ::= ENUMERATED { + alerting (0), + active (1)} + +NameIndicator ::= SEQUENCE { + callingName [0] Name OPTIONAL, +...} + +Name ::= CHOICE { + namePresentationAllowed [0] NameSet, + presentationRestricted [1] NULL, + nameUnavailable [2] NULL, + namePresentationRestricted [3] NameSet} + +NameSet ::= SEQUENCE { + dataCodingScheme [0] USSD-DataCodingScheme, + lengthInCharacters [1] INTEGER, + nameString [2] USSD-String, +...} + +-- NameIndicator, Name and NameSet are defined because of CNAP. +-- The USSD-DataCodingScheme shall indicate use of the default alphabet through the +-- following encoding: +-- bit 7 6 5 4 3 2 1 0 +-- | 0 0 0 0 | 1 1 1 1| + +RDN ::= CHOICE { + presentationAllowedAddress [0] RemotePartyNumber, + presentationRestricted [1] NULL, + numberNotAvailableDueToInterworking [2] NULL, + presentationRestrictedAddress [3] RemotePartyNumber} + +RemotePartyNumber ::= SEQUENCE { + partyNumber [0] ISDN-AddressString, + partyNumberSubaddress [1] ISDN-SubaddressString OPTIONAL, +...} + +-- accessRegisterCCEntry OPERATION ::= { +-- ARGUMENT SEQUENCE { +-- ... } + +AccessRegisterCCEntryArg ::= SEQUENCE { + ...} + +-- RegisterCC-EntryRes ::= +-- RESULT SEQUENCE { +-- ccbs-Feature [0] IMPLICIT SEQUENCE { +-- ccbs-Index [0] IMPLICIT INTEGER ( 1 .. 5 ) OPTIONAL, +-- b-subscriberNumber [1] IMPLICIT OCTET STRING ( SIZE( 1 .. 20 ) ) ( SIZE( 1 .. 9 ) ) OPTIONAL, +-- b-subscriberSubaddress [2] IMPLICIT OCTET STRING ( SIZE( 1 .. 21 ) ) OPTIONAL, +-- basicServiceGroup [3] CHOICE { +-- bearerService [2] IMPLICIT OCTET STRING ( SIZE( 1 ) ), +-- teleservice [3] IMPLICIT OCTET STRING ( SIZE( 1 ) )} OPTIONAL, +-- ... } OPTIONAL, +-- ... } +-- ERRORS { +-- systemFailure | +-- dataMissing | +-- unexpectedDataValue | +-- callBarred | +-- illegalSS-Operation | +-- ss-ErrorStatus | +-- ss-Incompatibility | +-- shortTermDenial | +-- longTermDenial | +-- facilityNotSupported } +-- CODE local : 119 +-- } + +-- callDeflection OPERATION ::= { +-- ARGUMENT SEQUENCE { + +CallDeflectionArg ::= SEQUENCE { + deflectedToNumber [0] AddressString, + deflectedToSubaddress [1] ISDN-SubaddressString OPTIONAL, +...} + +-- RETURN RESULT TRUE +-- ERRORS { +-- illegalSS-Operation | +-- ss-ErrorStatus | +-- ss-NotAvailable | +-- ss-Incompatibility | +-- facilityNotSupported | +-- systemFailure | +-- resourcesNotAvailable | +-- forwardingViolation | +-- callBarred | +-- deflectionToServedSubscriber | +-- invalidDeflectedToNumber | +-- specialServiceCode | +-- forwardingFailed } +-- CODE local : 117 +-- } + + +--userUserService OPERATION ::= { +-- ARGUMENT SEQUENCE { + +UserUserServiceArg ::= SEQUENCE { + uUS-Service [0] UUS-Service, + uUS-Required [1] BOOLEAN, +... } + +-- RETURN RESULT TRUE +-- ERRORS { +-- illegalSS-Operation | +-- ss-ErrorStatus | +-- ss-NotAvailable | +-- ss-Incompatibility | +-- facilityNotSupported | +-- systemFailure | +-- resourcesNotAvailable | +-- rejectedByNetwork | +-- rejectedByUser } +-- CODE local : 118 +-- } + + +UUS-Service ::= ENUMERATED { + uUS1 (1), + uUS2 (2), + uUS3 (3), +... } + +-- exception handling: +-- In case of UUS-Service with any other value, indicated as "UUS required", +-- but not understood by the MS, the call will be cleared. + +-- lcs-LocationNotification OPERATION ::= { +-- ARGUMENT SEQUENCE { +LocationNotificationArg ::= SEQUENCE { + notificationType [0] NotificationToMSUser, + locationType [1] LocationType, + lcsClientExternalID [2] LCSClientExternalID OPTIONAL, + lcsClientName [3] LCSClientName OPTIONAL, + ... , + lcsRequestorID [4] LCSRequestorID OPTIONAL, + lcsCodeword [5] LCSCodeword OPTIONAL, + lcsServiceTypeID [6] LCSServiceTypeID OPTIONAL } + +-- exception handling: +-- At reception of an unrecognised notificationType value the receiver shall reject the +-- operation with a return error cause of unexpected data value. +-- At reception of an unrecognised locationType value the receiver shall reject the +-- operation with a return error cause of unexpected data value. + +-- RESULT SEQUENCE { +LocationNotificationRes ::= SEQUENCE { + verificationResponse [0] VerificationResponse OPTIONAL, + ...} +-- ERRORS { +-- systemFailure | +-- unexpectedDataValue } +-- CODE local : 116 +-- } + +VerificationResponse::= ENUMERATED { + permissionDenied (0), + permissionGranted (1), +... } +-- exception handling: +-- an unrecognized value shall be treated the same as value 0 (permissionDenied) + + +-- lcs-MOLR OPERATION ::= { +-- ARGUMENT SEQUENCE { +-- RESULT SEQUENCE { + +LCS-MOLRArg ::= SEQUENCE { + molr-Type [0] MOLR-Type, + locationMethod [1] LocationMethod OPTIONAL, + lcs-QoS [2] LCS-QoS OPTIONAL, + lcsClientExternalID [3] LCSClientExternalID OPTIONAL, + mlc-Number [4] ISDN-AddressString OPTIONAL, + gpsAssistanceData [5] GPSAssistanceData OPTIONAL, + ..., + supportedGADShapes [6] SupportedGADShapes OPTIONAL, + lcsServiceTypeID [7] LCSServiceTypeID OPTIONAL, + ageOfLocationInfo [8] AgeOfLocationInformation OPTIONAL, + locationType [9] LocationType OPTIONAL, + pseudonymIndicator [10] NULL OPTIONAL } +-- The parameter locationMethod shall be included if and only if the molr-Type is set to value +-- deCipheringKeys or assistanceData. +-- The parameter gpsAssistanceData shall be included if and only if the molr-Type is set to value +-- assistanceData and locationMethod is set to value assistedGPS. + +MOLR-Type::= ENUMERATED { + locationEstimate (0), + assistanceData (1), + deCipheringKeys (2), +... } +-- exception handling: +-- an unrecognized value shall be rejected by the receiver with a return error cause of +-- unexpected data value. + +LocationMethod::= ENUMERATED { + msBasedEOTD (0), + msAssistedEOTD (1), + assistedGPS (2), + ..., + msBasedOTDOA (3) +} +-- exception handling: +-- When this parameter is received with value msBasedEOTD or msAssistedEOTD and the MS +-- is camped on an UMTS Service Area then the receiver shall reject it +-- with a return error cause of unexpected data value. +-- When this parameter is received with value msBasedOTDOA and the MS +-- is camped on a GSM Cell then the receiver shall reject it with a return error cause of +-- unexpected data value. +-- an unrecognized value shall be rejected by the receiver with a return error cause of +-- unexpected data value. + +GPSAssistanceData::= OCTET STRING (SIZE (1..38)) + +-- Octets 1 to 38 are coded in the same way as the octets 3 to 7+2n of Requested GPS Data IE +-- in 3GPP TS 49.031. + +LCS-MOLRRes::= SEQUENCE { + locationEstimate [0] Ext-GeographicalInformation OPTIONAL, + decipheringKeys [1] DecipheringKeys OPTIONAL, + ..., + add-LocationEstimate [2] Add-GeographicalInformation OPTIONAL} + +-- ERRORS { +-- systemFailure | +-- unexpectedDataValue | +-- dataMissing | +-- facilityNotSupported | +-- ss-SubscriptionViolation | +-- positionMethodFailure } +-- CODE local : 115 +-- } + +-- Parameters locationEstimate or add-LocationEstimate (one but not both) +-- shall be included if and only if the +-- molr-Type in LocationRequestArg was set to value locationEstimate. +-- Parameter add-LocationEstimate shall not be included if the supportedGADShapes +-- parameter was not received in the LCS-MOLRArg. +-- The locationEstimate and the add-locationEstimate parameters shall not be sent if +-- the supportedGADShapes parameter has been received in LCS-MOLRArg +-- and the shape encoded in locationEstimate or add-LocationEstimate is not marked +-- as supported in supportedGADShapes. In such a case LCS-MOLRArg +-- shall be rejected with error FacilityNotSupported with additional indication +-- shapeOfLocationEstimateNotSupported. +-- Parameter decipheringKeys shall be included if and only if the molr-Type +-- in LocationRequestArg was set to value deCipheringKeys. + +DecipheringKeys::= OCTET STRING (SIZE (15)) + +-- Octets in DecipheringKeys are coded in the same way as the octets 3 to 17 of Deciphering Key IE +-- in 3GPP TS 49.031. I.e. these octets contain Current Deciphering Key, Next Deciphering Key and +-- Ciphering Key Flag. + +-- lcs-AreaEventRequest OPERATION ::= { +-- ARGUMENT SEQUENCE { + +LCS-AreaEventRequestArg ::= SEQUENCE { + referenceNumber [0] LCS-ReferenceNumber, + h-gmlc-address [1] GSN-Address, + deferredLocationEventType [3] DeferredLocationEventType, + areaEventInfo [4] AreaEventInfo, +... } +-- RETURN RESULT TRUE +-- ERRORS { +-- systemFailure | +-- facilityNotSupported | +-- unexpectedDataValue } +-- CODE local : 114 +-- } + +-- the msAvailableValue in the DeferredLocationEventType is not applicable for this procedure + +-- lcs-AreaEventReport OPERATION ::= { +-- ARGUMENT SEQUENCE { + +LCS-AreaEventReportArg ::= SEQUENCE { + referenceNumber [0] LCS-ReferenceNumber, + h-gmlc-address [1] GSN-Address, +... } +-- RETURN RESULT TRUE +-- ERRORS { +-- systemFailure | +-- unexpectedDataValue | +-- facilityNotSupported } +-- CODE local : 113 +-- } + +-- lcs-AreaEventCancellation OPERATION ::= { +-- ARGUMENT SEQUENCE { +LCS-AreaEventCancellationArg ::= SEQUENCE { + referenceNumber [0] LCS-ReferenceNumber, + h-gmlc-address [1] GSN-Address, +... } +-- CODE local : 112 +-- } + + +--buildMPTY OPERATION ::= { +-- RETURN RESULT TRUE +-- ERRORS { +-- illegalSS-Operation | +-- ss-ErrorStatus | +-- ss-NotAvailable | +-- ss-Incompatibility | +-- systemFailure | +-- resourcesNotAvailable | +-- maxNumberOfMPTY-ParticipantsExceeded } +-- CODE local : 124 +-- } + +--holdMPTY OPERATION ::= { +-- RETURN RESULT TRUE +-- ERRORS { +-- illegalSS-Operation | +-- ss-ErrorStatus | +-- ss-Incompatibility | +-- facilityNotSupported | +-- systemFailure } +-- CODE local : 123 +-- } + +--retrieveMPTY OPERATION ::= { +-- RETURN RESULT TRUE +-- ERRORS { +-- illegalSS-Operation | +-- ss-ErrorStatus | +-- ss-Incompatibility | +-- facilityNotSupported | +-- systemFailure } +-- CODE local : 122 +-- } + +--splitMPTY OPERATION ::= { +-- RETURN RESULT TRUE +-- ERRORS { +-- illegalSS-Operation | +-- ss-ErrorStatus | +-- ss-Incompatibility | +-- facilityNotSupported | +-- systemFailure } +-- CODE local : 121 +-- } + +--explicitCT OPERATION ::= { +-- RETURN RESULT TRUE +-- ERRORS { +-- illegalSS-Operation | +-- ss-ErrorStatus | +-- ss-NotAvailable | +-- ss-Incompatibility | +-- facilityNotSupported | +-- systemFailure | +-- resourcesNotAvailable | +-- callBarred } +-- CODE local : 126 +-- } + +END diff --git a/asn1/gsm_ss/gsm_ss.cnf b/asn1/gsm_ss/gsm_ss.cnf new file mode 100644 index 0000000000..0770d11831 --- /dev/null +++ b/asn1/gsm_ss/gsm_ss.cnf @@ -0,0 +1,50 @@ +# gsm_ss.cnf
+# GSM SS conformation file
+
+# $Id$
+
+#.MODULE_IMPORT
+
+MAP-Protocol gsm_map
+
+#.INCLUDE ../gsmmap/gsm_map-exp.cnf
+
+#.EXPORTS
+
+#.PDU
+
+#.NO_EMIT
+
+#.TYPE_RENAME
+
+#.FIELD_RENAME
+
+#----------------------------------------------------------------------------------------
+#.FN_BODY DestinationReference
+
+ tvbuff_t *parameter_tvb;
+ char *digit_str;
+
+ offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+ ¶meter_tvb);
+ digit_str = unpack_digits(parameter_tvb, 1);
+
+ proto_tree_add_string(tree, hf_MAP_DialoguePDU_destref_digits, parameter_tvb, 1, -1, digit_str);
+ g_free(digit_str);
+
+#.END
+#----------------------------------------------------------------------------------------
+#.FN_BODY OriginationReference
+ tvbuff_t *parameter_tvb;
+ char *digit_str;
+
+ offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+ ¶meter_tvb);
+ digit_str = unpack_digits(parameter_tvb, 1);
+
+ proto_tree_add_string(tree, hf_MAP_DialoguePDU_origref_digits, parameter_tvb, 1, -1, digit_str);
+ g_free(digit_str);
+
+#.END
+#----------------------------------------------------------------------------------------
+#.END
diff --git a/asn1/gsm_ss/packet-gsm_ss-template.c b/asn1/gsm_ss/packet-gsm_ss-template.c new file mode 100644 index 0000000000..f9489edd5a --- /dev/null +++ b/asn1/gsm_ss/packet-gsm_ss-template.c @@ -0,0 +1,410 @@ +/* packet-gsm_ss-template.c + * Routines for GSM Supplementary Services dissection + * Copyright 2005, Anders Broman <anders.broman@ericsson.com> + * Based on the dissector by: + * Michael Lum <mlum [AT] telostech.com> + * In association with Telos Technology Inc. + * + * Title 3GPP Other + * + * Reference [1] + * Mobile radio Layer 3 supplementary service specification; + * Formats and coding + * (3GPP TS 24.080 version ) + * $Id$ + * + * Ethereal - Network traffic analyzer + * By Gerald Combs <gerald@ethereal.com> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * References: ETSI TS 129 002 + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <epan/packet.h> +#include <epan/prefs.h> +#include <epan/conversation.h> +#include <epan/tap.h> + +#include <stdio.h> +#include <string.h> + +#include "packet-ber.h" +#include "packet-gsm_ss.h" +#include "packet-gsm_map.h" + +#define PNAME "GSM_SS" +#define PSNAME "GSM_SS" +#define PFNAME "gsm_ss" + +const value_string gsm_ss_err_code_strings[] = { + { 1, "Unknown Subscriber" }, + { 3, "Unknown MSC" }, + { 5, "Unidentified Subscriber" }, + { 6, "Absent Subscriber SM" }, + { 7, "Unknown Equipment" }, + { 8, "Roaming Not Allowed" }, + { 9, "Illegal Subscriber" }, + { 10, "Bearer Service Not Provisioned" }, + { 11, "Teleservice Not Provisioned" }, + { 12, "Illegal Equipment" }, + { 13, "Call Barred" }, + { 14, "Forwarding Violation" }, + { 15, "CUG Reject" }, + { 16, "Illegal SS Operation" }, + { 17, "SS Error Status" }, + { 18, "SS Not Available" }, + { 19, "SS Subscription Violation" }, + { 20, "SS Incompatibility" }, + { 21, "Facility Not Supported" }, + { 25, "No Handover Number Available" }, + { 26, "Subsequent Handover Failure" }, + { 27, "Absent Subscriber" }, + { 28, "Incompatible Terminal" }, + { 29, "Short Term Denial" }, + { 30, "Long Term Denial" }, + { 31, "Subscriber Busy For MT SMS" }, + { 32, "SM Delivery Failure" }, + { 33, "Message Waiting List Full" }, + { 34, "System Failure" }, + { 35, "Data Missing" }, + { 36, "Unexpected Data Value" }, + { 37, "PW Registration Failure" }, + { 38, "Negative PW Check" }, + { 39, "No Roaming Number Available" }, + { 40, "Tracing Buffer Full" }, + { 42, "Target Cell Outside Group Call Area" }, + { 43, "Number Of PW Attempts Violation" }, + { 44, "Number Changed" }, + { 45, "Busy Subscriber" }, + { 46, "No Subscriber Reply" }, + { 47, "Forwarding Failed" }, + { 48, "OR Not Allowed" }, + { 49, "ATI Not Allowed" }, + { 50, "No Group Call Number Available" }, + { 51, "Resource Limitation" }, + { 52, "Unauthorized Requesting Network" }, + { 53, "Unauthorized LCS Client" }, + { 54, "Position Method Failure" }, + { 58, "Unknown Or Unreachable LCS Client" }, + { 59, "MM Event Not Supported" }, + { 60, "ATSI Not Allowed" }, + { 61, "ATM Not Allowed" }, + { 62, "Information Not Available" }, + { 71, "Unknown Alphabet" }, + { 72, "USSD Busy" }, + { 120, "Nbr Sb Exceeded" }, + { 121, "Rejected By User" }, + { 122, "Rejected By Network" }, + { 123, "Deflection To Served Subscriber" }, + { 124, "Special Service Code" }, + { 125, "Invalid Deflected To Number" }, + { 126, "Max Number Of MPTY Participants Exceeded" }, + { 127, "Resources Not Available" }, + { 0, NULL } +}; + +const value_string gsm_ss_opr_code_strings[] = { + { 10, "Register SS" }, + { 11, "Erase SS" }, + { 12, "Activate SS" }, + { 13, "Deactivate SS" }, + { 14, "Interrogate SS" }, + { 16, "Notify SS" }, + { 17, "Register Password" }, + { 18, "Get Password" }, + { 19, "Process Unstructured SS Data" }, + { 38, "Forward Check SS Indication" }, + { 59, "Process Unstructured SS Request" }, + { 60, "Unstructured SS Request" }, + { 61, "Unstructured SS Notify" }, + { 77, "Erase CC Entry" }, + { 112, "lcs-AreaEventCancellation" }, + { 113, "lcs-AreaEventReport" }, + { 114, "LCS-AreaEventRequest" }, + { 115, "LCS MOLR" }, + { 116, "LCS Location Notification" }, + { 117, "Call Deflection" }, + { 118, "User User Service" }, + { 119, "Access Register CC Entry" }, + { 120, "Forward CUG Info" }, + { 121, "Split MPTY" }, + { 122, "Retrieve MPTY" }, + { 123, "Hold MPTY" }, + { 124, "Build MPTY" }, + { 125, "Forward Charge Advice" }, + { 126, "Explicit CT" }, + + { 0, NULL } +}; + +/* Initialize the protocol and registered fields */ +int proto_gsm_ss = -1; + +static int hf_gsm_ss_getPassword = -1; +static int hf_gsm_ss_currentPassword = -1; +static int hf_gsm_ss_SS_Code = -1; +#include "packet-gsm_ss-hf.c" + +/* Initialize the subtree pointers */ +#include "packet-gsm_ss-ett.c" + +static dissector_table_t sms_dissector_table; /* SMS TPDU */ + +/* Global variables */ +static proto_tree *top_tree; + + + +#include "packet-gsm_ss-fn.c" + + +int +gsm_ss_dissect(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,guint32 opcode, gint comp_type_tag) +{ + switch (comp_type_tag){ + case 1: /* invoke */ + switch (opcode){ + case 10: /* Register SS -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_RegisterSS_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 11: /* Erase SS -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_SS_ForBS_Code(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 12: /* Activate SS -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_SS_ForBS_Code(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 13: /*Deactivate SS -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_SS_ForBS_Code(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 14: /*Interrogate SS -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_SS_ForBS_Code(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 16: /*Notify SS */ + dissect_gsm_ss_NotifySS_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 17: /*Register Password -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_SS_Code(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 18: /*Get Password -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_GetPasswordArg(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_getPassword); + break; + case 19: /*Process Unstructured SS Data */ + dissect_gsm_ss_SS_UserData(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 38: /*Forward Check SS Indication -- imports operation from MAP-MobileServiceOperations*/ + break; + case 59: /*Process Unstructured SS Request -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_Ussd_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 60: /*Unstructured SS Request -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_Ussd_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 61: /*Unstructured SS Notify -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_Ussd_Arg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 77: /*Erase CC Entry -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_EraseCC_EntryArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 112: /*lcs-AreaEventCancellation */ + dissect_gsm_ss_LCS_AreaEventCancellationArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 113: /*lcs-AreaEventReport */ + dissect_gsm_ss_LCS_AreaEventReportArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 114: /*LCS-AreaEventRequest */ + dissect_gsm_ss_LCS_AreaEventRequestArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 115: /*LCS MOLR */ + dissect_gsm_ss_LCS_MOLRArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 116: /*LCS Location Notification */ + dissect_gsm_ss_LocationNotificationArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 117: /*Call Deflection */ + dissect_gsm_ss_CallDeflectionArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 118: /*User User Service */ + dissect_gsm_ss_UserUserServiceArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 119: /* Access Register CC Entry */ + dissect_gsm_ss_AccessRegisterCCEntryArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 120: /*Forward CUG Info */ + break; + case 121: /*Split MPTY */ + break; + case 122: /*Retrieve MPTY */ + break; + case 123: /*Hold MPTY */ + break; + case 124: /*Build MPTY */ + break; + case 125: /*Forward Charge Advice */ + dissect_gsm_ss_ForwardChargeAdviceArg(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 126: /*Explicit CT */ + break; + default: + break; + } + break; + case 2: /* returnResultLast */ + switch (opcode){ + case 10: /*registerSS*/ + offset=dissect_gsm_map_SS_Info(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 11: /*eraseSS*/ + offset=dissect_gsm_map_SS_Info(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 12: /*activateSS*/ + offset=dissect_gsm_map_SS_Info(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 13: /*deactivateSS*/ + offset=dissect_gsm_map_SS_Info(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 14: /*interrogateSS*/ + offset=dissect_gsm_map_InterrogateSS_Res(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 16: /*Notify SS */ + break; + case 17: /*Register Password -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_NewPassword(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_SS_Code); + break; + case 18: /*Get Password -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_CurrentPassword(FALSE, tvb, offset, pinfo, tree, hf_gsm_ss_currentPassword); + break; + case 19: /*Process Unstructured SS Data */ + offset=dissect_gsm_ss_SS_UserData(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 38: /*Forward Check SS Indication -- imports operation from MAP-MobileServiceOperations*/ + break; + case 59: /*Process Unstructured SS Request -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_Ussd_Res(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 60: /*Unstructured SS Request -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_Ussd_Res(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 61: /*Unstructured SS Notify -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_Ussd_Res(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 77: /*Erase CC Entry -- imports operations from MAP-SupplementaryServiceOperations*/ + offset=dissect_gsm_map_EraseCC_EntryRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 112: /*lcs-AreaEventCancellation */ + break; + case 113: /*lcs-AreaEventReport */ + break; + case 114: /*LCS-AreaEventRequest */ + break; + case 115: /*LCS MOLR */ + offset=dissect_gsm_ss_LCS_MOLRRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 116: /*LCS Location Notification */ + offset=dissect_gsm_ss_LocationNotificationRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 117: /*Call Deflection */ + break; + case 118: /*User User Service */ + break; + case 119: /* Access Register CC Entry */ + offset=dissect_gsm_map_RegisterCC_EntryRes(FALSE, tvb, offset, pinfo, tree, -1); + break; + case 120: /*Forward CUG Info */ + break; + case 121: /*Split MPTY */ + break; + case 122: /*Retrieve MPTY */ + break; + case 123: /*Hold MPTY */ + break; + case 124: /*Build MPTY */ + break; + case 125: /*Forward Charge Advice */ + break; + case 126: /*Explicit CT */ + break; + default: + break; + } + break; + case 3: /* returnError */ + break; + case 4: /* reject */ + break; + default: + break; + } + return offset; +} + +static void +dissect_gsm_ss(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) +{ + +} + +/*--- proto_reg_handoff_gsm_ss --------------------------------------- +This proto is called directly from packet-gsm_a and needs to know component type */ +void proto_reg_handoff_gsm_ss(void) { + dissector_handle_t gsm_ss_handle; + + gsm_ss_handle = create_dissector_handle(dissect_gsm_ss, proto_gsm_ss); + + +} + +/*--- proto_register_gsm_ss -------------------------------------------*/ +void proto_register_gsm_ss(void) { + + /* List of fields */ + static hf_register_info hf[] = { + { &hf_gsm_ss_getPassword, + { "Password", "gsm_ss.password", + FT_UINT8, BASE_DEC, VALS(gsm_map_GetPasswordArg_vals), 0, + "Password", HFILL }}, + { &hf_gsm_ss_currentPassword, + { "currentPassword", "gsm_ss.currentPassword", + FT_STRING, BASE_NONE, NULL, 0, + "", HFILL }}, + { &hf_gsm_ss_SS_Code, + { "ss-Code", "gsm_ss.ss_Code", + FT_UINT8, BASE_DEC, VALS(ssCode_vals), 0, + "", HFILL }}, + +#include "packet-gsm_ss-hfarr.c" + }; + + /* List of subtrees */ + static gint *ett[] = { +#include "packet-gsm_ss-ettarr.c" + }; + + /* Register protocol */ + proto_gsm_ss = proto_register_protocol(PNAME, PSNAME, PFNAME); +/*XXX register_dissector("gsm_ss", dissect_gsm_ss, proto_gsm_ss);*/ + /* Register fields and subtrees */ + proto_register_field_array(proto_gsm_ss, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + + +} + + diff --git a/asn1/gsm_ss/packet-gsm_ss-template.h b/asn1/gsm_ss/packet-gsm_ss-template.h new file mode 100644 index 0000000000..558a468a2d --- /dev/null +++ b/asn1/gsm_ss/packet-gsm_ss-template.h @@ -0,0 +1,42 @@ +/* packet-gsm_map-template.h + * Routines for GSM Supplementary Services dissection + * Copyright 2005, Anders Broman <anders.broman@ericsson.com> + * Based on the dissector by: + * Michael Lum <mlum [AT] telostech.com> + * In association with Telos Technology Inc. + * + * Title 3GPP Other + * + * Reference [1] + * Mobile radio Layer 3 supplementary service specification; + * Formats and coding + * (3GPP TS 24.080 version ) + * $Id$ * + * Ethereal - Network traffic analyzer + * By Gerald Combs <gerald@ethereal.com> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef PACKET_GSM_SS_H +#define PACKET_GSM_SS_H +int gsm_ss_dissect(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, guint32 opcode, gint comp_type_tag); + +extern const value_string gsm_ss_opr_code_strings[]; +extern const value_string gsm_ss_err_code_strings[]; +/* #include "packet-gsm_map-exp.h"*/ + +#endif /* PACKET_GSM_SS_H */ |