diff -r 000000000000 -r 8e480a14352b messagingfw/biomsgfw/wappinc/wapp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/biomsgfw/wappinc/wapp.h Mon Jan 18 20:36:02 2010 +0200 @@ -0,0 +1,357 @@ +// Copyright (c) 1999-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: +// Header file for the WAP Access Point Parser +// +// + +#ifndef __WAPP_H__ +#define __WAPP_H__ + + +#include +#include +#include +using namespace CommsDat; +#include +#include +#include + +class MMsvAttachmentManager; +class MMsvAttachmentManagerSync; + +#define BIO_MSG_ENTRY_UNPARSED 0 // iMtmData3=0 - an untouched, a virgin message entry! +#define BIO_MSG_ENTRY_PARSED 1 // iMtmData3=1 - entry parsed and externalised (has a store) +#define BIO_MSG_ENTRY_PROCESSED 2 // iMtmData3=2 - entry been parsed,externalised and processed + + +_LIT8(KDummyModemInitStr, "Modem Init String - final version to be decided!!!"); +_LIT(KWapDefaultSettingsName, "WAP Settings"); +_LIT(KWappDefaultBMName, "Unknown Bookmark"); // Default name for a bookmark. +_LIT(KWappDll, "KWAPP-DLL"); + +const TInt KGsmCsdSuffixLen = 8; +_LIT(KGsmCsdSuffix, "-GsmCsd"); // Suffix - append to Settings Name for Gsm/Csd ISP/IAP entry +_LIT(KGsmUssdSuffix, "-GsmUssd"); // Suffix - append to Settings Name for Gsm/Ussd ISP/IAP entry +_LIT(KIS136CsdSuffix, "-Is136Csd"); // Suffix - append to Settings Name for IS136/Csd ISP/IAP entry +_LIT(KGprsSuffix, "-Gprs"); // Suffix - append to Settings Name for GPRS ISP/IAP entry + + +enum TWappPanic // Assert Debug panic codes + { + EWappLimitsExceeded, + EWappErrMessageProcessed, + EWappEmptyBuffer, + EWappInvalidEntry, + EWappNullPointer + }; +/* +enum TBearer + { + EAll, + EIP, + ESMS7, + ESMS + }; +*/ +enum TCsdCallType + { + EAnalogue, + EIsdn + }; + +enum TCsdCallSpeed + { + EAutobauding, + E9600baud, + E14400baud, + E19200baud, + E28800baud, + E38400baud, + E43200baud, + E57600baud + }; + + +// Forward declarations +class RResourceFile; +class CRichText; +class CCommsDatabase; +class CCommsDbTableView; +class CIspTableData; +class TBearerSpeed; +class CWappBookmark; +class CWapIpBearerData; +class CWapSmsBearerData; +class CWapGprsBearerData; +class CWapCharsetConverter; + +class CMsvBIOWapAccessParser : public CBaseScriptParser2 +/** +@internalComponent +@released +*/ + { +// Enum and inline class defines +private: + enum TParseSession + { + EStart, // Don't do anything-just check message not empty & set Scheduler going + EUnfoldMessage, // Don't have to unfold the message, just save it + EParseMessage, // Parsing + EProcessInitialise, // Start ProcessL - restore data if necessary, PreProcess and Validate it + EProcessMessage, // Actual Processing of message data + ECompleteMessage // Completing .. + }; + + enum TWappBearerType + { + EWappUnknownBearer, + EWappGsmCsdBearer, + EWappGsmSmsBearer, + EWappGsmUssdBearer, + EWappIS136CsdBearer, + EWappGprsBearer + }; + + +// Member Variables +public: + //Defines which type of characteristic we're dealing with + enum TWappCharacteristicType + { + EWappUnknown, // Don't know the type yet + EWappAddressCharacteristic, // An address, but specific type undetermined + EWappGsmCsdCharacteristic, // A GSM/CSD address + EWappGsmSmsCharacteristic, // A GSM/SMS address + EWappGsmUssdCharacteristic, // A GSM/USSD address + EWappIS136CsdCharacteristic, // A IS136/CSD address + EWappGprsCharacteristic, // A GPRS address + EWappBookmarkCharacteristic, // A Bookmark + EWappURLCharacteristic, // A URL + EWappNameCharacteristic, // A name characteristic + EWappIDCharacteristic, // A ID characteristic + EWappMMSURLCharacteristic // A Multi Media Service Centre Url characteristic + }; + + + IMPORT_C static CMsvBIOWapAccessParser* NewL(CRegisteredParserDll& aRegisteredParserDll, CMsvEntry& aEntry, RFs& aFs); + ~CMsvBIOWapAccessParser(); + + void ParseL(TRequestStatus& aStatus, const TDesC& aSms); + void ProcessL(TRequestStatus& aStatus); + +private: + //Constructors + CMsvBIOWapAccessParser(CRegisteredParserDll& aRegisteredParserDll, // Only constructor-passes + CMsvEntry& aEntry, RFs& aFs); // parameters to base const + + void ConstructL(); + + // Active Object stuff + void DoCancel(); + void RunL(); + + // State Engine functions + + void CallChangeStateL(TInt aState); // Calls ChangeStateL with the right state + void ChangeStateL(TParseSession aState); // Advances State Machine to next state + + void ParseMessageL(); // Only checks & saves parsed data - calls DoParseL + + void CompleteMessageL(); //Sets the flag on TMsvEntry to show message parsed. + + void RequestComplete(TRequestStatus& aStatus, TInt aError); // Complete our async op. + + // ***************** Additional helper functions added by AHF ********************* +private: + + void StoreParsedDataL(); // Saves CParsedField data in a store + + void RestoreParsedDataL(); // Loads the CParsedField data from store + + void ResetProcessVariablesL(); // Resets variables, delete and create if necessary + + void DoParseL(); // Does the actual parsing of the message. + + void DoProcessL(); // Get data from array, commit to COMMDB + + void PreProcessL(); // Called by DoProcessL,extracts data from array into + // Mapping object,rejects duplicate data + + // ******************* Helper Functions for Parsing ********************** + + void ReadCharacteristicL(); // Gets a CHARACTERISTIC from the message + + void ReadParmL(); // Reads in a PARM from the message + + void SettingsNamePresentL(); // Ensures that a NAME characteristic is present. + + + TUint32 Read_mb_u_int32L(); // Extract a multiple byte encoded 32 bit int + + HBufC* ReadStringTableReferenceLC(TUint32 anOffset);// Gets string from the string table + // using a 32 bit integer offset + + void ReadASCIIorUTF8StringL(); //finds the end of a string encoded in UTF-8 or ASCII + void ReadUCS2StringL(); //finds end of a string encoded in 2-byte Unicode + HBufC* ReadInlineStringLC(); // Extracts an inline string from the message + + void AppendDataPairL(const TDesC& aFieldName, const TDesC& aFieldValue);// Creates CParsedField, + // & appends to array + + void AppendNameFieldL(const TDesC& aFieldName); // Creates a CParsedField, + // & append to array + + void InsertDataPairL(const TDesC& aFieldName,const TDesC& aFieldValue,TInt anIndex);// Inserts CParsedField + // at specified position. + + TChar GetNextMessageByteL(); // Gets next character from TLex - leaves if at end of buffer + + // ****************** Helper functions for ProcessL ***************************** + void ExtractBearerDataL(TInt& aCurrentPos);//Extracts data from iParsedFieldArray + // & stores in WAP & ISP table objects. + // Increments the current pos ref as it goes + + void ExtractBookmarkDataL(TInt& aIndex); // Extracts bookmark data from array to create + // a bookmark. Rejects invalid bookmarks. + // Ensures that array positioned at next characteristic + + void ValidateCharacteristicsL(); // Ensures that don't have invalid combinations + // of characteristic eg URLs, IDs, NAMES must have a bearer type + // but Bookmarks can be by themselves + + TBool IsCharacteristicName(TInt anIndex); // True if name at index positino is a Characteristic name + + + TInt IsValidTokenNameL(const TInt anArrayIndex); // Validates the name against defined strings + // returns 0 if OK, error otherwise + + void WriteDataToDBL(); // Creates entries in the tables using + // data in the arrays of table info + + TBool DeleteTableEntryL(const TDesC& aTableName, const TDesC& aEntryName); // returns True if there are records in the CommDB table + void WriteToCommDatDialOutISPTableL(const TDesC& aRecName); // Writes/amends Dial Out ISP table + void WriteToCommsDatIAPTableL(const TDesC& aRecName); // Writes/amends WAP table + void WriteToCommDatGprsTableL(const TDesC& aRecName); // Writes/amends Gprs table + void WriteToCommDatWapAccessPointTableL(const TDesC& aRecName); // Writes/amends WAP table + void WriteToCommDatWapIpBearerTableL(); + void WriteToCommDatWapSmsBearerTableL(); // Writes/amends Dial-Out WAP table + void DeleteCommDatTableEntryL(TMDBElementId aElementName, const TDesC& aCsdNameStr); + + + void WriteBookmarksToFileL(); // Stores bookmarks as an attachment file in the .eBM format + + void WriteMMSURLL(); // Write the MMS URL to the setting in the message server. + + TCommsDbWapWspOption GetWSPType(TDesC& aPortValue); // Returns the appropriate enum for the Port value + + TBool UseSecurity(TDesC& aPortValue); //Returns the security level for the Port Value + + void SetWapIspEntryIdL(const TDesC& aEntryName); // Set the iCurrentBearerType BEFORE calling this!!!! + //Sets variables holding ID of Dial Out ISP ID entry + + void SetWapIapEntryIdL(const TDesC& aEntryName, CWapIpBearerData& aWapIpTable); // Sets variables holding ID of Dial Out IAP ID entry + + void SetWapAPEntryIdL(); // Sets ID of entry in WAP Access Point Table. Uses iWAPSettings + + void SetModemInitStringL(); // Sets the modem initialisation string + + void UpdateStartPageUrlL(); // Updates the URL of start page in WAP table + + // ****************** General Functions ***************************** + + // Locate a Name value, default is from start of array, returns -1 if search fails + TInt LocateParsedFieldName(const TDesC& aFieldName, const TInt aStartIndex=0); + + void RemoveAttachmentIfExistL(const TDesC& aFileName, MMsvAttachmentManager& aManager, MMsvAttachmentManagerSync& aManagerSync); + + void Panic(TInt aPanic); + //Member variables +private: + TInt iState; // Current session state + TRequestStatus* iReport; + TInt iCompleted; // Stores completion code from previous session state + +private: + // Additional variables added by AHF + + TWappCharacteristicType iCurrentCharacteristic; + + TUint32 iWBXMLversionX10; // WBXML version *10 to give an int eg 1.0 -> 10 + TUint32 iPublicID; //PublicId of document + // Internal Symbian character set identifier for incoming strings + TUint32 iCharacterSet; + HBufC* iStringTable; // Table of strings to be used for str table reference + + CArrayPtrSeg* iBookmarkList; // Array of bookmarks to store + TPtrC iWAPSettingsName; // Name for these WAP settings-get from NAME characteristic + TPtrC iUrl; // URL of the start page + TPtrC iMMSUrl; // URL of the MMSC + TPtrC iID; // ID used by these settings + HBufC8* iModemInitString; // String used to hold Modem Initialisation string + + CWapIpBearerData* iGsmCsdWapIpTable; // Wap IP table data GSM/CSD + CWapIpBearerData* iGprsWapIpTable; // Wap IP table data for GPRS + + CIspTableData* iWapIpISPTable; // 1 WAP GSM/CSD table entry = 1 ISP table entry + CWapSmsBearerData* iWapSmsTable; // No links to ISP table. + CWapGprsBearerData* iWapGprsTable; + + TBool iGsmCsdData; + TBool iGsmSmsData; + TBool iGprsData; + TBool iURLData; + TBool iNameData; + TBool iIdData; + TBool iMMSURLData; + + //commit data + CMDBSession* iDBSession; + + + TUint32 iRecordId; + + TUint32 iWapAccessPtID; // ID of entry in WAP Access Point Table + + TUint32 iWapLocation; + TUint32 iWapChargeCard; + TUint32 iWapModem; + + CWapCharsetConverter* iCharsetConverter; + TWappBearerType iCurrentBearerType; + }; + + +class CWapCharsetConverter: public CBase +/** +@internalComponent +@released +*/ + { + public: + static CWapCharsetConverter* NewL(RFs& aFs, TUint aMibEnum); + void ConvertL(const TDesC& aSource, TDes& aSink); + ~CWapCharsetConverter(); + private: + void ConstructL(TInt aMibEnum); + CWapCharsetConverter(RFs& aFs) : iFs(aFs){} + private: + RFs& iFs; + CCnvCharacterSetConverter* iConverter; + CArrayFix* iAvailableCharsets; + TBool iParseable; + }; + + +#endif // __WAPP_H__