voipplugins/accountcreationplugin/engine/inc/acpcontroller.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:29:57 +0100
branchRCL_3
changeset 22 d38647835c2e
parent 0 a4daefaec16c
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2007-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:  Declarition of CAcpController
*
*/

 
#ifndef ACPCONTROLLER_H
#define ACPCONTROLLER_H

#include <e32base.h>
#include <s32file.h>

#include <sipobserver.h>
#include <sipprofileregistryobserver.h>
#include <sipmanagedprofileregistry.h>

#include "accountcreationengineconstants.h"
#include "macpxmlhandlerobserver.h"
#include "macphttphandlerobserver.h"
#include "macpimagehandlerobserver.h"

class CFbsBitmap;
class CAcpProvider;
class CAcpXmlHandler;
class CAcpImageHandler;
class CAcpHttpHandler;
class CAcpImageHandler;
class MAcpControllerObserver;
class CACPBrowserParams;
class MSIPProfileRegistryObserver;
class MImageHandlerObserver;

/**
 *  CAcpController class
 *  Declarition of CAcpController.
 *
 *  @lib accountcreationplugin.lib
 *  @since S60 v3.2
 */
NONSHARABLE_CLASS( CAcpController ) : public CBase,
                                      public MAcpXmlHandlerObserver,
                                      public MAcpHttpHandlerObserver,
                                      public MSIPProfileRegistryObserver,
                                      public MImageHandlerObserver
    {
public: 

    /**
     * Different kind of field types supported by ACP.
     */
    enum TFetchTypes
        {
        EXml = 0, // provider list in xml form (default)
        ESis,     // sis file
        EIcon,    // icon file (png)
        EAction   // action file containing wbxml provisioning data
        };    

    /**
     * Two-phased constructor.
     *
     * @param aObserver Controller observer.
     */
    IMPORT_C static CAcpController* NewL(
        MAcpControllerObserver& aObserver );

    /**
     * Two-phased constructor.
     *
     * @param aObserver Controller observer.
     */
    IMPORT_C static CAcpController* NewLC(
        MAcpControllerObserver& aObserver );

    /**
     * Destructor.
     */
    virtual ~CAcpController();

    /**
     * Fetches provider list from network and parses it.
     *
     * @since S60 v3.2
     */
    IMPORT_C void FetchProviderListFromNetworkL();

    /**
     * Fetches SIS file from network.
     *
     * @since S60 v3.2
     * @param aSisUrl URL where to download.
     */
    IMPORT_C void FetchSisFileFromNetworkL( TDesC8& aSisUrl );

    /**
     * Fetches icon file from network.
     *
     * @since S60 v3.2
     * @param aIconUrl URL where to download.
     */
    IMPORT_C void FetchIconFileFromNetworkL( TDesC8& aIconUrl );

    /**
     * Returns count of providers in providers array.
     *
     * @since S60 v3.2
     * @return Number of providers
     */
    IMPORT_C TInt CountOfProviders() const;

    /**
     * Returns provider information referenced by index.
     *
     * @since S60 v3.2
     * @param aIndex Provider list index.
     * @return Pointer to provider name.
     */
    IMPORT_C const TPtrC ProviderNameFromIndexL( TInt aIndex ) const;

    /**
     * Returns provider information referenced by index.
     *
     * @since S60 v3.2
     * @param aIndex Provider list index.
     * @return Pointer to provider SIS URL.
     */
    IMPORT_C const TPtrC8 ProviderSisUrlFromIndexL( TInt aIndex ) const;

    /**
     * Returns provider information referenced by index.
     *
     * @since S60 v3.2
     * @param aIndex Provider list index.
     * @return Pointer to provider activation URL.
     */
    IMPORT_C const TPtrC8 ProviderActivationUrlFromIndexL( 
        TInt aIndex ) const;

    /**
     * Returns provider information referenced by index.
     *
     * @since S60 v3.2
     * @param aIndex Provider list index.
     * @return pointer Provider creation urlURL.
     */
    IMPORT_C const TPtrC8 ProviderCreationUrlFromIndexL( 
        TInt aIndex ) const;

    /**
     * Returns provider information referenced by index.
     *
     * @since S60 v3.2
     * @param aIndex Provider list index.
     * @return Pointer to provider description.
     */
    IMPORT_C const TPtrC ProviderDescriptionFromIndexL( 
        TInt aIndex ) const;

    /**
     * Returns provider information referenced by index.
     *
     * @since S60 v3.2
     * @param aIndex Provider list index.
     * @return Pointer to provider Type.
     */
    IMPORT_C const TPtrC ProviderTypeFromIndexL( TInt aIndex ) const;

    /**
     * Returns provider icon URL referenced by index.
     *
     * @since S60 v3.2
     * @param aIndex Provider list index
     * @return Pointer to provider icon URL.
     */
    IMPORT_C const TPtrC8 ProviderIconUrlFromIndexL( TInt aIndex ) const;

    /**
     * Returns provider bitmap referenced by index.
     *
     * @since S60 v3.2
     * @param aIndex Provider list index.
     * @return Pointer to bitmap owned by provider.
     */
    IMPORT_C void ProviderBitmapsFromIndexL( TInt aIndex,
        CFbsBitmap*& aBitmap, CFbsBitmap*& aMask ) const;

    /**
     * Stores active list index in provider list view to member data.
     *
     * @since S60 v3.2
     * @param aIndex Index to be stored.
     */
    IMPORT_C void SaveActiveIndex( TInt aIndex );

    /**
     * Returns active list index from member data.
     *
     * @since S60 v3.2
     * @return Active list index in provider list view.
     */
    IMPORT_C TInt ActiveIndex() const;

    /**
     * Fetches the needed parameters for provisioning.
     *
     * @since S60 v3.2
     * @param aUrl for URL.
     */
    IMPORT_C void FetchParametersL( TDes& aUrl );

    /**
     * Cancels ongoing HTTP request.
     *
     * @since S60 v3.2
     */
    IMPORT_C void CancelHttpRequest();

    /**
     * Starts downloading action (wbxml) file from the server.
     * 
     * @since S60 v3.2
     * @param aUrl URL of the action file.
     */
    IMPORT_C void FetchActionFileL( const TDesC8& aUrl );

    /**
     * Gets session id that was received from the server.
     * 
     * @since S60 v3.2
     * @return Session id descriptor.
     */
    IMPORT_C const TDesC8& SessionId();
    
// from base class MAcpXmlHandlerObserver
    
    /**
     * From MAcpXmlHandlerObserver.
     * Notifies observer when parsing is completed.
     *
     * @since S60 v3.2
     * @param aError System wide error code.
     */
    IMPORT_C void NotifyParsingCompleted( TInt aError );

    /**
     * From MAcpXmlHandlerObserver.
     * Notifies when new provider is available.
     *
     * @since S60 v3.2
     * @param aError System wide error code.
     */
    IMPORT_C void NotifyParsedProviderL( const CAcpProvider& aProvider );

// from base class MAcpHttpHandlerObserver

    /**
     * From MAcpHttpHandlerObserver.
     * Notifies observer about HTTP events.
     *
     * @since S60 v3.2
     * @param aEvent HTTP event.
     */
    void NotifyHttpEvent( TInt aEvent );

    /**
     * From MAcpHttpHandlerObserver.
     * Notifies observer about HTTP event errors.
     *
     * @since S60 v3.2
     * @param aError HTTP event error.
     */
    void NotifyHttpError( TInt aError );

    /**
     * From MAcpHttpHandlerObserver.
     * Notifies observer about received body.
     *
     * @since S60 v3.2
     * @param aBodyData Body data.
     */
    void NotifyBodyReceived( const TDesC8& aBodyData );

    /**
     * From MAcpHttpHandlerObserver.
     * Notifies observer about received header.
     *
     * @since S60 v3.2
     * @param aContentType Content data.
     */
    void NotifyContentTypeReceived( const TDesC8& aBodyData );

    /**
     * From MAcpHttpHandlerObserver.
     * Notifies observer about received session id.
     * 
     * @since S60 v3.2
     * @param aSession Id Session id received from the server.
     */
    void NotifySessionIdReceivedL( const TDesC8& aSessionId );
    
// from base class MImageHandlerObserver

    /**
     * From MImageHandlerObserver.
     * Notifies completion of image handling.
     * 
     * @since S60 v3.2
     * @param aErr Error code.
     */
    void NotifyImageCompletion( TInt aErr );   

private:

    CAcpController( MAcpControllerObserver& aObserver );
    void ConstructL();

    /**
     * Creates XML file from received data.
     *
     * @since S60 v3.2
     * @param aFilename File to be created.
     */
    void CreateFileFromDataL( const TDesC& aFilename );
    
    /**
     * Parses received action file for wbxml content and sends it to
     * provisioning engine.
     * 
     * @since S60 v3.2
     */
    void HandleActionFileL();

    /**
     * Returns next index with an icon URL in the providers list.
     * 
     * @since S60 v3.2
     * 
     * @param aResultUrl On return points to the icon URL if found.
     * @return TInt Index in the providers list or KErrNotFound.
     */
    TInt NextIndexWithIconUrl( TPtrC8& aResultUrl );
    
    /**
     * Parses a specific header value from head wrapper format.
     * 
     * @since S60 v3.2
     * @param aHeaders Descriptor containing the headers.
     * @param aParam Parameter to be parsed.
     * @return Parameter value part of the header.
     */
    TPtrC8 GetHeaderParamL( const TDesC8& aHeaders, const TDesC8& aParam );
    
    /** 
     * From MSIPProfileRegistryObserver.
     * SIP profile information event.
     *
     * @since S60 v3.2
     * @param aProfileId is id for profile
     * @param aEvent type of information event
     */
    void ProfileRegistryEventOccurred(
        TUint32 aSIPProfileId, 
        TEvent aEvent );

    /**
     * From MSIPProfileRegistryObserver.
     * An asynchronous error has occurred related to SIP profile.
     *
     * @since S60 v3.2
     * @param aSIPProfileId the id of failed profile 
     * @param aError a error code
     */
    void ProfileRegistryErrorOccurred(
        TUint32 aSIPProfileId,
        TInt aError );
    
private: // data

    /**
     * Reference for contoller observer.
     */
    MAcpControllerObserver& iObserver;

    /**
     * Handle to XML parser.
     * Own.
     */
    CAcpXmlHandler* iParser;

    /**
     * Handle to HTTP handler.
     * Own.
     */
    CAcpHttpHandler* iHttpHandler;

    /**
     * Array for providers.
     * Own.
     */
    RPointerArray<CAcpProvider> iProviders;

    /**
     * Active list index, updated when provider specific view is opened.
     */
    TInt iActiveIndex;

    /**
     * Data fetched from network.
     * Own.
     */
    HBufC8* iData;

    /**
     * Type of data fetched from network.
     */
    TFetchTypes iType;

    /**
     * File server.
     */
    RFs iFs; 

    /**
     * Name of the file.
     */
    TBuf<KNameMaxLength> iFilename;

    /**
     * Handler for PnPMS parameters.
     */
    CACPBrowserParams* iPnpmsparams;

    /**
     * Provides the image convertions.
     * Own.
     */
    CAcpImageHandler* iImageHandler;
    
    /**
     * Session id to be used for all transactions.
     */
    HBufC8* iSessionId;
    
    /**
     * For getting SIP events.
     */
    CSIPManagedProfileRegistry* iSipModel;
    
    /**
     * A flag telling if the previous download attempt failed.
     * If it's ETrue, a new connection method is asked during the
     * next download.
     */
    TBool iErrorDownloading;
    
    /**
     * A flag telling if sis packet is downoloaded and sis installation
     * will be made.
     */
    TBool iSisInstallation;

    /**
     * File write stream for SIS file downloading.
     */
    RFileWriteStream iWs;

    // For unit testing.
#ifdef _DEBUG
    friend class T_CAcpController;
#endif
    };

#endif // ACPCONTROLLER_H

// End of file.