gba/gbaapi_qt/gbautilitybody.cpp
changeset 61 1cc4c46c2963
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gba/gbaapi_qt/gbautilitybody.cpp	Mon Oct 04 01:41:57 2010 +0300
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2010 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: GBA utility body to perform GBA bootstrapping operation.
+*/
+
+#include "gbautilitybody.h"
+
+CGbaUtilityBody* CGbaUtilityBody::NewL(GbaUtility* aGbautility)
+{
+    CGbaUtilityBody* self = new (ELeave) CGbaUtilityBody(aGbautility);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;   
+}
+
+void CGbaUtilityBody::ConstructL()
+{
+    iGbaUtility = CGbaUtility::NewL(*this);
+}
+
+CGbaUtilityBody::CGbaUtilityBody(GbaUtility* aGbautility) : iQtGbautility(aGbautility)
+{
+}
+
+CGbaUtilityBody::~CGbaUtilityBody()
+{
+    delete iGbaUtility;
+}
+
+GbaUtility::GbaErrorStatus CGbaUtilityBody::bootstrap(const GbaBootstrapInputData* gbainputdata, GbaBootstrapOutputData* gbaoutputdata)
+{
+    iGbaOutPutData = gbaoutputdata;
+    iInputGbaParameters.iNAFName.Copy(reinterpret_cast<const TUint8*>(gbainputdata->nafName.toAscii().data())
+            , gbainputdata->nafName.toAscii().length());
+    iInputGbaParameters.iFlags = gbainputdata->bootstrapFlag;
+    iInputGbaParameters.iUICCLabel.Copy(reinterpret_cast<const TUint8*>(gbainputdata->uiccLabel.toAscii().data())
+            , gbainputdata->uiccLabel.toAscii().length());
+    iInputGbaParameters.iProtocolIdentifier.Copy(reinterpret_cast<const TUint8*>(gbainputdata->protocolIdentifier.toAscii().data())
+            , gbainputdata->protocolIdentifier.toAscii().length());
+    iInputGbaParameters.iAPID = gbainputdata->accessPoint;
+    TInt error = iGbaUtility->Bootstrap( iInputGbaParameters, iOutputGbaParameters );
+    if(error != KErrNone) {
+        if (error == KErrInUse)
+            return GbaUtility::GbaErrorInUse;
+        else if (error == KErrGeneral)
+            return GbaUtility::GbaErrorGeneral;
+    }
+    return GbaUtility::GbaNoError;
+}
+
+void CGbaUtilityBody::cancelBootstrap()
+{
+    iGbaUtility->CancelBootstrap();
+}
+
+GbaUtility::GbaErrorStatus CGbaUtilityBody::setBsfAddress(const QString& aBsfAddress)
+{
+    HBufC8*bsfAddress = HBufC8::NewL(aBsfAddress.toAscii().length());
+    bsfAddress->Des().Copy(reinterpret_cast<const unsigned char*>(aBsfAddress.toAscii().data()), aBsfAddress.toAscii().length());
+    TInt error = iGbaUtility->SetBSFAddress(bsfAddress->Des());
+    delete bsfAddress;
+    if (error != KErrNone) {
+        if (error == KErrPermissionDenied)
+            return GbaUtility::GbaErrorPermissionDenied;
+        else
+            return GbaUtility::GbaErrorGeneral;
+    }
+    return GbaUtility::GbaNoError;
+}
+
+void CGbaUtilityBody::BootstrapComplete(TInt aError)
+{
+    if (aError != KErrNone) {
+        emit iQtGbautility->bootstrapCompleted(GbaUtility::GbaErrorBootstrapFailed);
+        return;
+    }
+    // Output: B-TID
+    iGbaOutPutData->bTid = QString::fromAscii(reinterpret_cast<const char*>(iOutputGbaParameters.iBTID.Ptr())
+            ,iOutputGbaParameters.iBTID.Length());
+    // Output: Ks_NAFs
+    QByteArray ksNaf;
+    ksNaf.append(reinterpret_cast<const char*>(iOutputGbaParameters.iKNAF.Ptr()));
+    iGbaOutPutData->ksNaf = ksNaf;
+    // Output: lifetime
+    QTime time(iOutputGbaParameters.iLifetime.DateTime().Hour()
+                ,iOutputGbaParameters.iLifetime.DateTime().Minute()
+                ,iOutputGbaParameters.iLifetime.DateTime().Second()
+                ,0/*milli seconds component*/);
+    QDate date(iOutputGbaParameters.iLifetime.DateTime().Year()
+                ,iOutputGbaParameters.iLifetime.DateTime().Month()
+                ,iOutputGbaParameters.iLifetime.DateTime().Day());
+    iGbaOutPutData->lifetime.setDate(date);
+    iGbaOutPutData->lifetime.setTime(time);
+    // Output: IMPI
+    iGbaOutPutData->impi = QString::fromAscii(reinterpret_cast<const char*>(iOutputGbaParameters.iKIMPI.Ptr())
+            ,iOutputGbaParameters.iKIMPI.Length());
+    // Output: GBA run-type
+    switch (iOutputGbaParameters.iGbaRunType) {
+    case E2GGBA:
+        iGbaOutPutData->gbaRunType = RunType2gGba;
+        break;
+    case E3GGBAME:
+        iGbaOutPutData->gbaRunType = RunType3gGbaMe;
+        break;
+    case EGBAU:
+        iGbaOutPutData->gbaRunType = RunType3gGbaU;
+        break;
+    case ENoType:
+        iGbaOutPutData->gbaRunType = RunTypeNone;
+        break;
+    default:
+        break;
+    }
+    // Output: type of UICC application used
+    iGbaOutPutData->uiccLabel = QString::fromAscii(reinterpret_cast<const char*>(iOutputGbaParameters.iOutputUICCLabel.Ptr())
+            ,iOutputGbaParameters.iOutputUICCLabel.Length());
+    emit iQtGbautility->bootstrapCompleted(GbaUtility::GbaNoError);
+}
+