omaprovisioning/provisioning/ProvisioningEngine/Inc/CWPPushMessage.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 14 Sep 2010 22:54:36 +0300
branchRCL_3
changeset 27 5cc2995847ea
parent 0 b497e44ab2fc
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* Copyright (c) 2002 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:  CWPPushMessage helps in saving/restoring a push message.
*
*/


#ifndef CWPPUSHMESSAGE_H
#define CWPPUSHMESSAGE_H

// INCLUDES
#include <e32base.h>

// FORWARD DECLARATIONS
class CMsvStore;
class CHTTPResponse;
class RWriteStream;

// CONSTANTS

// Authentication result: Authenticated
const TInt KWPAuthResultAuthenticated = 0;

// Authentication result: PIN required, but not supplied
const TInt KWPAuthResultPinRequired = 1;

// Authentication result: Authentication failed
const TInt KWPAuthResultAuthenticationFailed = 2;

// Authentication result: No authentication contained in message
const TInt KWPAuthResultNoAuthentication = 3;

// Security parameter NETWPIN
const TUint8 KSECNETWPIN = 0x00;

// Security parameter USERPIN
const TUint8 KSECUSERPIN = 0x01;

// Security parameter USERNETWPIN
const TUint8 KSECUSERNETWPIN = 0x02;

// Security parameter USERPINMAC
const TUint8 KSECUSERPINMAC = 0x03;

// No security parameter
const TUint8 KSECNONE = 0xff;


// CLASS DECLARATION

/**
*  CWPPushMessage helps in saving/restoring a push message.
*
*  @lib ProvisioningEngine
*  @since 2.0
*/ 
class CWPPushMessage : public CBase
    {
    public:  // Constructors and destructor
        
        /**
        * Two-phased constructor.
        */
        IMPORT_C static CWPPushMessage* NewL();

        /**
        * Two-phased constructor.
        */
        IMPORT_C static CWPPushMessage* NewLC();

        /**
        * Destructor.
        */
        ~CWPPushMessage();

    public: // New methods

        /** 
        * Stores the message to a message store.
        * @param aStore The store.
        */
        IMPORT_C void StoreL( CMsvStore& aStore ) const;

        /** 
        * Restores the message from a message store.
        * @param aStore The store.
        */
        IMPORT_C void RestoreL( CMsvStore& aStore );

        /** 
        * Externalizes the message to a stream.
        * @param aStream The stream 
        */
        IMPORT_C void ExternalizeL( RWriteStream& aStream ) const;

        /** 
        * Internalizes the message from a stream.
        * @param aStream The stream.
        */
        IMPORT_C void InternalizeL( RReadStream& aStream );

        /** 
        * Sets the message header and body.
        * @param aHeader The message header
        * @param aBody The message body
        */
        IMPORT_C void SetL( const TDesC8& aHeader, const TDesC8& aBody );

        /** 
        * Sets the message header and body. Ownership is transferred.
        * @param aHeader The message header
        * @param aBody The message body
        */
        IMPORT_C void Set( HBufC8* aHeader, HBufC8* aBody );

        /**
        * Sets the originator of the message. 
        * @param aOrig Originator of the message
        */
        IMPORT_C void SetOriginatorL( const TDesC8& aOrig );

        /** 
        * Returns the message header.
        * @return The message header
        */
        IMPORT_C const TDesC8& Header() const;

        /** 
        * Returns the message body.
        * @return The message body
        */
        IMPORT_C const TDesC8& Body() const;

        /**
        * Returns the originator of the message.
        * @return The originator
        */
        IMPORT_C const TDesC8& Originator() const;

        /**
        * Sets the authenticated flag.
        * @param aAuthenticated ETrue to set the message authenticated.
        */
        IMPORT_C void SetAuthenticated( TBool aAuthenticated );

        /**
        * Returns ETrue if the message is authenticated.
        * @return Whether the message is authenticated.
        */
        IMPORT_C TBool Authenticated() const;

        /**
        * Sets the saved flag.
        * @param aSaved ETrue to set the message saved.
        */
        IMPORT_C void SetSaved( TBool aSaved );

        /**
        * Returns ETrue if the message is saved.
        * @return Whether the message is saved.
        */
        IMPORT_C TBool Saved() const;

        /**
        * Returns the initiator URI of the message.
        * @return Initiator URI
        */
        IMPORT_C const TDesC8& InitiatorURI() const;

        /**
        * Returns the MAC of the message.
        * @return MAC
        */
        IMPORT_C const TDesC8& MAC() const;

        /**
        * Returns the SEC of the message.
        * @return SEC
        */
        IMPORT_C TUint SEC() const;

        /**
        * Returns the push flag of the message.
        * @return Push flag
        */
        IMPORT_C TInt PushFlag() const;

        /**
        * Parse the header.
        */
        IMPORT_C void ParseHeaderL();

        /**
        * Try to authenticate the message with HMAC.
        * @param aIMSI The SIM card number
        * @param aPIN The PIN entered by user
        * @return The result of authentication
        */
        IMPORT_C TInt AuthenticateL( const TDesC& aIMSI, const TDesC& aPIN );

    private:
        /**
        * C++ default constructor.
        */
        CWPPushMessage();

        /**
        * By default Symbian 2nd phase constructor is private.
        */
        void ConstructL();

    private:
        /**
        * Parse the content-type header.
        * @param aPointer Lexer pointing to content-type header.
        */
        void ParseContentType( TLex8& aPointer );

        /**
        * Parse the content-type header.
        * @param aPointer Lexer pointing to content-type header.
        */
        void ParseInitiatorURI( TLex8& aPointer );

        /**
        * Parse the content-type header.
        * @param aPointer Lexer pointing to content-type header.
        */
        void ParsePushFlag( TLex8& aPointer );

        /**
        * Retrieve a Short-integer.
        * @see Wireless Session Protocol Specification WAP-230-WSP-20010705-a
        * @param aPointer Lexer pointing to content-type header.
        * @return The short integer
        */
        TUint GetShortInteger( TLex8& aPointer ) const;

        /**
        * Retrieve a Long-integer.
        * @see Wireless Session Protocol Specification WAP-230-WSP-20010705-a
        * @param aPointer Lexer pointing to content-type header.
        * @return The long integer.
        */
        TInt64 GetLongInteger( TLex8& aPointer ) const;

        /**
        * Retrieve a Text-string.
        * @see Wireless Session Protocol Specification WAP-230-WSP-20010705-a
        * @param aPointer Lexer pointing to content-type header.
        * @return The string
        */
        TPtrC8 GetTextString( TLex8& aPointer ) const;

        /**
        * Retrieve a Text-value.
        * @see Wireless Session Protocol Specification WAP-230-WSP-20010705-a
        * @param aPointer Lexer pointing to content-type header.
        * @return The string
        */
        TPtrC8 GetTextValue( TLex8& aPointer ) const;

        /**
        * Retrieve a Token-text.
        * @see Wireless Session Protocol Specification WAP-230-WSP-20010705-a
        * @param aPointer Lexer pointing to content-type header.
        * @return The text string
        */
        TPtrC8 GetTokenText( TLex8& aPointer ) const;

        /**
        * Retrieve a Q-value.
        * @see Wireless Session Protocol Specification WAP-230-WSP-20010705-a
        * @param aPointer Lexer pointing to content-type header.
        * @return The integer
        */
        TUint GetQValue( TLex8& aPointer ) const;

        /**
        * Retrieve a Well-known-charset value.
        * @see Wireless Session Protocol Specification WAP-230-WSP-20010705-a
        * @param aPointer Lexer pointing to content-type header.
        * @return The character set number
        */
        TInt64 GetWellKnownCharset( TLex8& aPointer ) const;

        /**
        * Retrieve a Version-value.
        * @see Wireless Session Protocol Specification WAP-230-WSP-20010705-a
        * @param aPointer Lexer pointing to content-type header.
        * @return The version
        */
        TUint GetVersionValue( TLex8& aPointer ) const;

        /**
        * Retrieve a Constrained-encoding value.
        * @see Wireless Session Protocol Specification WAP-230-WSP-20010705-a
        * @param aPointer Lexer pointing to content-type header.
        * @return The constrained encoding value
        */
        TUint GetConstrainedEncoding( TLex8& aPointer ) const;

        /**
        * Retrieve an Integer-Value.
        * @see Wireless Session Protocol Specification WAP-230-WSP-20010705-a
        * @param aPointer Lexer pointing to content-type header.
        * @return The integer value
        */
        TInt64 GetIntegerValue( TLex8& aPointer ) const;

        /**
        * Check if lexer points to an Integer-value.
        * @see Wireless Session Protocol Specification WAP-230-WSP-20010705-a
        * @param aPointer Lexer pointing to content-type header.
        * @return ETrue if lexer points to an integer
        */
        TBool IsIntegerValue( TLex8& aPointer ) const;

        /**
        * Retrieve a Field-name.
        * @see Wireless Session Protocol Specification WAP-230-WSP-20010705-a
        * @param aPointer Lexer pointing to content-type header.
        * @return Field name
        */
        TUint GetFieldName( TLex8& aPointer ) const;

        /**
        * Retrieve a Delta-seconds-value.
        * @see Wireless Session Protocol Specification WAP-230-WSP-20010705-a
        * @param aPointer Lexer pointing to content-type header.
        * @return The seconds found
        */
        TInt64 GetDeltaSecondsValue( TLex8& aPointer ) const;

        /**
        * Retrieve a No-value.
        * @see Wireless Session Protocol Specification WAP-230-WSP-20010705-a
        * @param aPointer Lexer pointing to content-type header.
        */
        void GetNoValue( TLex8& aPointer ) const;

        /**
        * Retrieve a Date-value.
        * @see Wireless Session Protocol Specification WAP-230-WSP-20010705-a
        * @param aPointer Lexer pointing to content-type header.
        * @return The time value
        */
        TTime GetDateValue( TLex8& aPointer ) const;

        /**
        * Skip to content-type.
        * @return The Content-Type header
        */
        TPtrC8 ContentTypeHeader( CHTTPResponse& aResponse ) const;

        /**
        * Skip to x-wap-initiator-uri.
        * @return The X-WAP-Initiator-URI header
        */
        TPtrC8 InitiatorURIHeader( CHTTPResponse& aResponse ) const;

        /**
        * Skip to push-flag.
        * @return The Push-Flag header
        */
        TPtrC8 PushFlagHeader( CHTTPResponse& aResponse ) const;

        /**
        * Converts a HEX ASCII strings to binary.
        * @param aHex The hex ascii version
        * @return The binary version
        */
        HBufC8* PackLC( const TDesC8& aHex ) const;

        /**
        * Create a HMAC key from the IMSI.
        * @param aIMSI The IMSI
        * @param aKey Space for HMAC key.
        */
        void ConvertIMSIL( const TDesC& aIMSI, TPtr8& aKey ) const;

    private: // Data
        /// The message body. Owns.
        HBufC8* iBody;

        /// The message header. Owns.
        CHTTPResponse* iHeader;

        /// The originator of the message. Owns.
        HBufC8* iOriginator;

        /// Whether the message is authenticated
        TBool iAuthenticated;

        /// Whether the message is saved
        TBool iSaved;

        /// The initiator URI
        TPtrC8 iInitiator;

        /// The security parameter
        TUint iSEC;

        /// The MAC value. Owns.
        TPtrC8 iMAC;

        /// The Push Flag
        TInt iPushFlag;
    };

#endif /* CWPPUSHMESSAGE_H */