messagingfw/biomsgfw/wappinc/wapp.h
changeset 0 8e480a14352b
--- /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 <bsp.h>
+#include <commsdattypesv1_1.h>
+#include <commsdat.h>
+using namespace CommsDat;
+#include <cdbcols.h>
+#include <cdblen.h>
+#include <charconv.h>
+
+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<CWappBookmark>* 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<CCnvCharacterSetConverter::SCharacterSet>*  iAvailableCharsets;
+		TBool iParseable;
+	};
+
+
+#endif // __WAPP_H__