gba/gbaserver/inc/bootstrap.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 26 Jan 2010 15:20:08 +0200
changeset 0 164170e6151a
child 1 d5423fbb4f29
permissions -rw-r--r--
Revision: 201004

/*
 * Copyright (c) 2007 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:  Bootstrap classes definitions
 *
 */

#ifndef BOOTSTRAPIMPL_H
#define BOOTSTRAPIMPL_H

#include <e32base.h>
#include <stringpool.h>
#include <http.h>
#include <gbautility.h>
#include "M3GPPAuthenticationCallback.h"
#include "gbauicc.h"

void ResetAndDestroyArray(TAny* aArray);

class CGbaServerSession;
class CDataRetriever;
// format for output of data/time values
_LIT(KDateFormat,"%D%M%Y%/0%1%/1%2%/2%3%/3 %:0%H%:1%T%:2%S.%C%:3");

class MBootstrapCallBack : public M3GPPAuthenticationCallback
    {
public:
    
    virtual void CompleteBootStrappingL(TInt aError) = 0;
    
    virtual TBool InterfaceIs2G() = 0;
    
    };

class C3GPPBootstrap : public CActive, public MBootstrapCallBack
    {
public:
    
    static C3GPPBootstrap* NewL(CGbaServerSession* aSession);
    
    static C3GPPBootstrap* NewLC(CGbaServerSession* aSession);
    
    void InitializeL();
    
    void GetBootstrappingMaterialL(const TDesC8& aBSFAddress,
            const TDesC8& aNAFURL, const TDesC8& aUICC_LABEL,
            const TUint8& aFlags, const TDesC8& aKeyUsage, TDes8 &aKsNAF,
            TDes8 &aBTID, TTime &aLifetime, EGBARunType& aGBARunType,
            const TInt& aIAPID);
    
    void CancelBootstrap();
    
    TInt GetState() const;
    
    void Cleanup();
    
    TBool GBAUAvailabilityL();

    // from M3GPPAuthenticationCallback  
    TBool GetCredentialsL(const TUriC8& aURI, RString aRealm, RString aNonce,
            RString aAlgorithm, RString& aUsername, RString& aPassword,
            RString& aResync, TBool& aResyncRequired);

    virtual ~C3GPPBootstrap();

    //from MBootstrapCallBack
    void CompleteBootStrappingL(TInt aError);
    
    TBool InterfaceIs2G();

private:

    void DoBootstrapL();
    
    TBool GenerateKeyMaterialL();
    
    void ConstructL();
    
    C3GPPBootstrap(CGbaServerSession* aSession);
    
    TBool LoadCredentialsL();
    
    void StoreCredentialsL();
    
    TBool ConvertStringToTTime(TDesC8& aLifetimeBuf, TTime* aLifetime);
    
    TBool IsStillValid(TTime* aLifetime);
    
    TInt LoadGBAUAvailabililtyFromStoreL(TBool& aIsfromGBAClient, TBool& aGBAUAvail);
    
    void SaveGBAUAvailabilityToStoreL(TBool& aGBAUAvail);
    
    TBool CheckGBAUAvailabilityL(TBool aIsfromGBAClient);
    
    MUICCInterface* RequestUICCInterfaceL();
    
    TBool IsPluginExistL();
    
    void MakePrivateFilenameL(RFs& aFs, const TDesC& aLeafName, TDes& aNameOut);
    
    void EnsurePathL(RFs& aFs, const TDesC& aFile);

    //From CActive
    void RunL();
    
    TInt RunError(TInt aError);
    
    void DoCancel();

public:

    enum TBootstrapperState
        {
        EIdle, EInitialize, EBusy, ECancel
        };
private:
    enum TSecurityAlgorithm
        {
        ESecAlgUnknown, EAKAv1, EAKAv2, ESIMv2
        };

private:

    MUICCInterface* iSmartCardInterface;
    TDes8*          iCallerBTIDBuf;     //not owned,  pointer to return buffer
    TDes8*          iCallerKsNAFBuf;    //not owned,  pointer to return buffer
    TTime*          iCallerLifetime;    //not owned, pointer to return object
    EGBARunType*    iCallerGBARunType;  //not owned, pointer to return object
    HBufC8*         iKsNAF;             //owned
    HBufC8*         iBTID;              //owned
    TTime           iLifetime;          //onwed
    HBufC8*         iIdentity;          //buffer for impi
    HBufC8*         iNAFID;             //buffer for nafid
    HBufC8*         iRand;              //buffer for rand
    HBufC8*         iMasterKey;         //buffer for Ks
    EGBARunType     iGBARunType;
    CDataRetriever* iDataRetriever;     //owned
    TInt            iAuthFailed;
    TBootstrapperState iBSState;
    TBool           iGBAUAvailable;
    TUid            iImplementationUID;
    TUid            iDtorIDKey;
    CGbaServerSession* iSession;        //Not owned
    };

#endif
//EOF