diff -r 000000000000 -r ff3b6d0fd310 telutils/phoneparser/inc/CPhoneGsmSsParser.h --- /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 +#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