--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/phoneparser/inc/CPhoneGsmSsParser.h Tue Feb 02 01:11:09 2010 +0200
@@ -0,0 +1,460 @@
+/*
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: It is responsible of parsing of GSM specified supplementary
+* service requests.
+*
+*/
+
+
+#ifndef CPHONEGSMSSPARSER_H
+#define CPHONEGSMSSPARSER_H
+
+// INCLUDES
+#include <e32base.h>
+#include "CPhoneGsmParserBase.h"
+
+// CONSTANTS
+
+/*
+* SUPPLEMENTARY SERVICE UIDS
+*/
+
+/*
+* Now follows uids for all supported supplementary services.
+*/
+const TUint32 KPhoneUidForwardingAll =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 0 );
+const TUint32 KPhoneUidForwardingAllConditional =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 1 );
+const TUint32 KPhoneUidForwardingUnconditional =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 2 );
+const TUint32 KPhoneUidForwardingNoReply =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 3 );
+const TUint32 KPhoneUidForwardingNotReachable =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 4 );
+const TUint32 KPhoneUidForwardingBusy =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 5 );
+const TUint32 KPhoneUidBarringAllOutgoingCalls =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 6 );
+const TUint32 KPhoneUidBarringAllIncomingCalls =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 7 );
+const TUint32 KPhoneUidBarringAllServices =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 8 );
+const TUint32 KPhoneUidBarringAllOutgoingInternationalCalls =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 9 );
+const TUint32 KPhoneUidBarringAllOutgoingInternationalCallsExceptHome =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 10 );
+const TUint32 KPhoneUidBarringAllOutgoingServices =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 11 );
+const TUint32 KPhoneUidBarringAllIncomingCallsWhenRoaming =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 12 );
+const TUint32 KPhoneUidBarringAllIncomingServices =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 13 );
+const TUint32 KPhoneUidWaiting =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 14 );
+const TUint32 KPhoneUidCallingLineIdentificationPresentation =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 15 );
+const TUint32 KPhoneUidCallingLineIdentificationRestriction =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 16 );
+const TUint32 KPhoneUidConnectedLinePresentation =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 17 );
+const TUint32 KPhoneUidConnectedLinePresentationRestriction =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 18 );
+const TUint32 KPhoneUidPassword =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 19 );
+const TUint32 KPhoneUidCallingNamePresentation =
+ PHONE_MAKE_UID( KPhoneGsmUidSupplementaryService, 20 );
+
+/**
+* It defines the maximum lenght of service code.
+*/
+const TInt KPhoneGsmSsServiceCodeMaxLength = 5;
+
+// CLASS DECLARATION
+
+/**
+* It is responsible of parsing GSM specified supplementary services that
+* are supported.
+*
+* @since 1.0
+* @lib phoneparser.lib
+*/
+NONSHARABLE_CLASS( CPhoneGsmSsParser )
+ : public CPhoneGsmParserBase
+ {
+ public: // Types
+
+ /**
+ * Enumeration for different service types.
+ */
+ enum TServiceType
+ {
+ EServiceActivation,
+ EServiceDeactivation,
+ EServiceInterrogation,
+ EServiceRegistration,
+ EServiceErasure
+ };
+
+ /**
+ * Enumeration for different syntax.
+ *
+ * ESyntaxNotAllowed
+ * Not allowed.
+ *
+ * ESyntaxNoParameters
+ * No parameters.
+ *
+ * SS_code#
+ *
+ * ESyntaxEmptyOrBasicCode
+ * No parameters or empty and basic code.
+ *
+ * SS_code# or SS_code**BB#
+ *
+ * ESyntaxNumberOptBasicCodeOptTimer
+ * Number parameter or number parameter and basic code or
+ * number parameter and basic code and timer or number parameter
+ * and timer.
+ *
+ * SS_code*NN# or SS_code*NN*BB# or SS_code*NN*BB*TT# or
+ * SS_code*NN**TT#
+ *
+ * ESyntaxNumberOptBasicCode
+ * Number parameter or number parameter and basic code.
+ *
+ * SS_code*NN# or SS_code*NN*BB#
+ *
+ * ESyntaxPasswordOptBasicCode
+ * Password or password and basic code.
+ *
+ * SS_code*PPPP# or SS_code*PPPP*BB#
+ *
+ * ESyntaxOptGroupCodePasswordNewPasswordNewPassword
+ *
+ * Register group code and password and new password and
+ * new password. Or same with empty register group.
+ *
+ * SS_code*xxx*PPPP*WWWW*WWWW#
+ * SS_code**PPPP*WWWW*WWWW#
+ *
+ * ESyntaxEmptyOrBasicCode2
+ * Empty or Basic code
+ *
+ * SS_code# or SS_code*BB#
+ */
+ enum TServiceSyntax
+ {
+ ESyntaxNotAllowed,
+ ESyntaxNoParameters,
+ ESyntaxEmptyOrBasicCode,
+ ESyntaxNumberOptBasicCodeOptTimer,
+ ESyntaxNumberOptBasicCode,
+ ESyntaxPasswordOptBasicCode,
+ ESyntaxOptGroupCodePasswordNewPasswordNewPassword,
+ ESyntaxEmptyOrBasicCode2
+ };
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CPhoneGsmSsParser* NewLC();
+
+ /**
+ * Destructor.
+ */
+ ~CPhoneGsmSsParser();
+
+ public: // New functions
+
+
+ /**
+ * Pack data to integer.
+ *
+ * @param aResult It will contain packed data.
+ * @param aType type of service.
+ * @param aSyntax syntax of service.
+ */
+ static void PackData(
+ TUint& aResult,
+ TServiceType aType,
+ TServiceSyntax aSyntax );
+
+ /**
+ * Unpack data from integer.
+ *
+ * @param aData packed data.
+ * @param aType type of service.
+ * @param aSyntax syntax of service.
+ */
+ static void UnpackData(
+ TUint aData,
+ TServiceType& aType,
+ TServiceSyntax& aSyntax );
+
+// from base class CPhoneGsmParserBase
+
+ /**
+ * From CPhoneGsmParserBase.
+ * Parses ss strings.
+ *
+ * @param aString string to be parser.
+ * @param aResult It will contain result.
+ * @param aOptions It contains options.
+ * @return ETrue iff string parsed successfully.
+ */
+ TBool ParseL(
+ const TDesC& aString,
+ CPhoneGsmParserResult& aResult,
+ CPhoneGsmOptionContainerBase& aOptions );
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CPhoneGsmSsParser();
+
+ /**
+ * By default Symbian OS constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ * Handle parameters.
+ */
+ TBool HandleParametersL(
+ TLex& aInput,
+ CPhoneGsmParserResult& aResult,
+ TServiceSyntax aSyntax );
+
+ /**
+ * Handle "not allowed" syntax.
+ */
+ TBool HandleNotAllowedL(
+ TLex& aInput,
+ CPhoneGsmParserResult& aResult );
+
+ /**
+ * Handle "no more parameters" syntax.
+ */
+ TBool HandleNoParametersL(
+ TLex& aInput,
+ CPhoneGsmParserResult& aResult );
+
+ /**
+ * Handle "empty or basic code" syntax.
+ */
+ TBool HandleEmptyOrBasicCodeL(
+ TLex& aInput,
+ CPhoneGsmParserResult& aResult );
+
+ /**
+ * Handle "number optionally basic code and timer" syntax.
+ */
+ TBool HandleNumberOptBasicCodeOptTimerL(
+ TLex& aInput,
+ CPhoneGsmParserResult& aResult );
+
+ /**
+ * Handle "number optionally basic code" syntax.
+ */
+ TBool HandleNumberOptBasicCodeL(
+ TLex& aInput,
+ CPhoneGsmParserResult& aResult );
+
+ /**
+ * Handle "password optionally basic code" syntax.
+ */
+ TBool HandlePasswordOptBasicCodeL(
+ TLex& aInput,
+ CPhoneGsmParserResult& aResult );
+
+ /**
+ * Handle "optionally group code, then old password and new
+ * password twice" syntax.
+ */
+ TBool HandleOptGroupCodePasswordNewPasswordNewPasswordL(
+ TLex& aInput,
+ CPhoneGsmParserResult& aResult );
+
+ /**
+ * Handle "empty or basic code" syntax.
+ */
+ TBool HandleEmptyOrBasicCode2L(
+ TLex& aInput,
+ CPhoneGsmParserResult& aResult );
+
+ /**
+ * Handle "empty parameter" syntax.
+ */
+ TBool HandleEmptyParameterL(
+ TLex& aInput,
+ CPhoneGsmParserResult& aResult );
+
+ /**
+ * Handle "basic code" syntax.
+ */
+ TBool HandleBasicCodeL(
+ TLex& aInput,
+ CPhoneGsmParserResult& aResult );
+
+ /**
+ * Handle "directory number" syntax.
+ */
+ TBool HandleNumberL(
+ TLex& aInput,
+ CPhoneGsmParserResult& aResult );
+
+ /**
+ * Handle "timer" syntax.
+ */
+ TBool HandleTimerL(
+ TLex& aInput,
+ CPhoneGsmParserResult& aResult );
+
+ /**
+ * Handle "password" syntax.
+ */
+ TBool HandlePasswordL(
+ TLex& aInput,
+ CPhoneGsmParserResult& aResult );
+
+ /**
+ * Handle "group code" syntax.
+ */
+ TBool HandleGroupCodeL(
+ TLex& aInput,
+ CPhoneGsmParserResult& aResult );
+
+ /**
+ * Check basic service code.
+ */
+ TBool CheckBasicCode( const TDesC& aCode );
+
+ /**
+ * Check 'no reply timer'
+ */
+ TBool CheckTimer( const TDesC& aCode );
+
+ /**
+ * Check password group code.
+ */
+ TBool CheckGroupCode( const TDesC& aCode );
+
+ /**
+ * Find string (starting from current position) that
+ * contains characters from given string.
+ *
+ * (note that empty string may be returned).
+ */
+ static TPtrC FindString(
+ TLex& aInput,
+ const TDesC& aAllowedCharacters );
+
+ /**
+ * Add a new service.
+ *
+ * SHOULD ONLY BE USED DURING CONSTRUCTION.
+ *
+ * Panics if invalid service description is passed.
+ *
+ * @param aService It is service description.
+ * @param aUid It is uid for the service.
+ */
+ void AddL( const TDesC& aService, TUint aUid );
+
+ /**
+ * Add a new service.
+ *
+ * SHOULD ONLY BE USED DURING CONSTRUCTION.
+ */
+ void AddServiceL(
+ const TDesC& aServiceCode,
+ TServiceSyntax aActivation,
+ TServiceSyntax aDeactivation,
+ TServiceSyntax aInterrogation,
+ TServiceSyntax aRegistration,
+ TServiceSyntax aErasure,
+ TUint aUid );
+
+ /**
+ * Get next number as descriptor.
+ *
+ * ONLY TO BE USED DURING SERVICE DESCRIPTION PARSING.
+ *
+ * Panics if next character (not a space) does not start
+ * a new number or the number is invalid.
+ *
+ * @param aLex It is lex.
+ * @return Returns number.
+ */
+ static TPtrC NextNumber( TLex& aLex );
+
+ /**
+ * Get next number as value.
+ *
+ * ONLY TO BE USED DURING SERVICE DESCRIPTION PARSING.
+ *
+ * Panics if next character (not a space) does not start
+ * a new number or the number is invalid.
+ *
+ * @param aLex It is lex.
+ * @return Returns number as value.
+ */
+ static TUint NextNumberAsValue( TLex& aLex );
+
+ /**
+ * Converts to service syntax.
+ *
+ * @param aService It is numerical value of service syntax.
+ * @return Returns service syntax corresponding to value.
+ */
+ static TServiceSyntax ConvertToServiceSyntax( TUint aService );
+
+ private: // Data
+
+ /**
+ * It is type for service code.
+ */
+ typedef TBuf< KPhoneGsmSsServiceCodeMaxLength > TServiceCode;
+
+ /**
+ * It defines structure containing information about a service.
+ */
+ class TServiceInfo
+ {
+ public:
+ TServiceCode iCode;
+ TServiceSyntax iActivation;
+ TServiceSyntax iDeactivation;
+ TServiceSyntax iInterrogation;
+ TServiceSyntax iRegistration;
+ TServiceSyntax iErasure;
+ TUint iUid;
+ };
+
+ // Type for service code array.
+ typedef CArrayFixFlat< TServiceInfo > CServiceArray;
+
+ // Owned array of service codes.
+ CServiceArray* iArray;
+
+ };
+
+#endif // CPHONEGSMSSPARSER_H
+
+// End of File