vpnengine/agileprovisionws/src/agileprovisionws.cpp
branchRCL_3
changeset 49 5960d2d03390
parent 46 29c8f9bc68e1
child 51 1bffc46e983d
--- a/vpnengine/agileprovisionws/src/agileprovisionws.cpp	Wed Sep 15 13:20:54 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,378 +0,0 @@
-/*
-* 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:  VPN Agile provision Web Service Client
-*
-*/
-
-#include <SenXmlServiceDescription.h>
-#include <SenServiceConnection.h>
-#include <SenServiceManager.h>
-#include <SenIdentityProvider.h>
-#include "agileprovisionws.h"
-#include "agileprovisiondefs.h"
-#include "policyinstaller_constants.h"
-#include "base64.h" 
-
-
-EXPORT_C CAgileProvisionWs* CAgileProvisionWs::NewL()
-    {
-	CAgileProvisionWs* self = NewLC();
-	CleanupStack::Pop(); // self
-	return self;
-    }
-
-
-EXPORT_C CAgileProvisionWs* CAgileProvisionWs::NewLC() 	
-    {
-	CAgileProvisionWs* self = new (ELeave) CAgileProvisionWs();
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	return self;
-    }
-
-CAgileProvisionWs::CAgileProvisionWs()
-    {
-    }
-
-
-void CAgileProvisionWs::ConstructL()
-    {
-    }
-
-
-CAgileProvisionWs::~CAgileProvisionWs()
-    {
-    delete iPService;
-    delete iServiceAddr;
-    }
-
-EXPORT_C void CAgileProvisionWs::GetPolicy(const TDesC8& aEndPointUri, const TUint aIapId,
-                                           TRequestStatus& aStatus)
-    {
-    __ASSERT_DEBUG( iClientStatus == NULL,
-                    User::Invariant() );
-    
-    // Store client's request status.
-       
-    iClientStatus = &aStatus;
-    *iClientStatus = KRequestPending;
-
-    TRAPD( err, DoGetPolicyL( aEndPointUri, aIapId) );
-    if ( err != KErrNone )
-        {
-        DoComplete( err );
-        }
-    }
-
-EXPORT_C void CAgileProvisionWs::CancelGetPolicy()
-    {
-    if ( iPService != NULL )
-        {
-        iPService->CancelTransaction();
-        delete iPService;
-        iPService = NULL;
-        }
-    DoComplete( KErrCancel );
-    }
-
-EXPORT_C void CAgileProvisionWs::SetServiceAddr(const HBufC8* aServiceAddr)
-    {
-    iServiceAddr=aServiceAddr;
-    }
-
-void CAgileProvisionWs::DoGetPolicyL(const TDesC8& aEndPointUri, const TUint aIapId)
-    {
-    
-    CSenXmlServiceDescription* pServiceDesc = CSenXmlServiceDescription::NewLC( aEndPointUri,
-                                                                                    KNullDesC8() );
-    iEndPointUri=&aEndPointUri;
-    pServiceDesc->SetFrameworkIdL( KDefaultBasicWebServicesFrameworkID );            
-    delete iPService;
-    iPService = NULL;
-
-    iPService  = CAgileProvisionServiceService::NewL( *this, *pServiceDesc );
-    
-    CleanupStack::PopAndDestroy( pServiceDesc );
-    
-    iPService->iIapId= aIapId;   
-    
-    iState = KStateGettingConf;
-      
-    }
-
-void CAgileProvisionWs::HandleMessageL(const TDesC8& aMessage)
-{
-    
-    iPService->ResetTransactionId();
-    
-    if ( iState == KStateGettingConf )
-        {
-        HandleGetConfSoapInL( aMessage );
-        GenerateCertReqL();
-        iPService->GetCertificateAsyncL(iPService->iCertreq);
-        iState = KStateGettingCertificate;
-        }
-    else if ( iState == KStateGettingCertificate )
-        {
-        HandleGetCertificateSoapInL( aMessage );        
-        DoComplete( KErrNone );
-        iState = KStateInitial;
-        }
-    else
-        {
-        User::Leave( KErrArgument );
-        }
-}
-
-void CAgileProvisionWs::HandleErrorL(const TInt aErrorCode, const TDesC8&  /*aError*/)
-    {
-    DoComplete( aErrorCode );
-    }
-
-
-void CAgileProvisionWs::SetStatus(const TInt aStatus)
-    {
-    TInt err = KErrNone;
-    if ( aStatus == KSenConnectionStatusReady )
-        {
-        TRAP( err, iPService->GetConfAsyncL() );
-        }
-    else if ( aStatus == KSenConnectionStatusCreateFailed )
-        {
-        err = aStatus;
-        }
-    else
-        {
-        // Do nothing.
-        }
-    
-    if ( err != KErrNone )
-        {
-        DoComplete( err );
-        }
-    }
-
-EXPORT_C void CAgileProvisionWs::HandleGetConfSoapInL(const TDesC8& aMessage)
-    {
-    CSenXmlReader *pXmlReader = CSenXmlReader::NewL();
-    CleanupStack::PushL(pXmlReader);
-     
-    //CSenDomFragment
-    CSenDomFragment* pBase = CSenDomFragment::NewL();
-    CleanupStack::PushL(pBase);
-
-    //must set the content handler
-    pXmlReader->SetContentHandler(*pBase);
-   // and the reader
-    pBase->SetReader(*pXmlReader);
-
-    pXmlReader->ParseL(aMessage);
-    
-    RPointerArray<CSenElement>& array = pBase->AsElement().ElementsL();
-        
-	//start the listing of the elements, first level is 1
-    TInt contentType(1);
-		
-	TInt vpnFilePathLth = KAgileProvisionPolicyFileName().Length() + KTempDirectory().Length();
-	HBufC* vpnFilePathBuf = HBufC::NewLC(vpnFilePathLth);
-	TPtr vpnFilePath(vpnFilePathBuf->Des());
-	vpnFilePath.Copy(KTempDirectory);
-	vpnFilePath.Append(KAgileProvisionPolicyFileName);
-       
-	ParseFileFromSoapEnvelopeL(array, contentType, 1, vpnFilePath);
-    
-    CleanupStack::PopAndDestroy(vpnFilePathBuf); // file
-    CleanupStack::PopAndDestroy(pBase); // delete pXmlReader, procMsg, responseStr
-    CleanupStack::PopAndDestroy(pXmlReader); // delete pXmlReader, procMsg, responseStr
-    }
-
-
-EXPORT_C void CAgileProvisionWs::HandleGetCertificateSoapInL(const TDesC8& aMessage)
-    {
-    CSenXmlReader *pXmlReader = CSenXmlReader::NewL();
-    CleanupStack::PushL(pXmlReader);
-     
-    //CSenDomFragment
-    CSenDomFragment* pBase = CSenDomFragment::NewL();
-    CleanupStack::PushL(pBase);
-
-    //must set the content handler
-    pXmlReader->SetContentHandler(*pBase);
-   // and the reader
-    pBase->SetReader(*pXmlReader);
-
-    pXmlReader->ParseL(aMessage);
-    
-    RPointerArray<CSenElement>& array = pBase->AsElement().ElementsL();
-
-    //start the listing of the elements, first level is 1
-       
-    TInt vpnFilePathLth = KAgileProvisionCertificateFileName().Length() + KTempDirectory().Length();
-    HBufC* vpnFilePathBuf = HBufC::NewLC(vpnFilePathLth);
-    TPtr vpnFilePath(vpnFilePathBuf->Des());
-    vpnFilePath.Copy(KTempDirectory);
-    vpnFilePath.Append(KAgileProvisionCertificateFileName);
-    TInt contentType(2);
-    ParseFileFromSoapEnvelopeL(array, contentType, 1, vpnFilePath);
-    
-    CleanupStack::PopAndDestroy(vpnFilePathBuf); // file
-    CleanupStack::PopAndDestroy(pBase); // delete pXmlReader, procMsg, responseStr
-    CleanupStack::PopAndDestroy(pXmlReader); // delete pXmlReader, procMsg, responseStr
-    
-    }
-
-// The listing of the elements is done in ListNodesL function:
-void CAgileProvisionWs::ParseFileFromSoapEnvelopeL(RPointerArray<CSenElement>& aArray, 
-                                                       TInt aContentType,TInt aLevel, TDesC& aFileName )
-    {
-
-    TInt size = aArray.Count();
-    for(TInt i=0; i<size; i++)
-        {
-        //get an element
-        CSenElement* pElement = aArray[i];
-        if ( pElement->HasContent() )
-            {
-            //get the content of the element
-            TPtrC8 content =  pElement->Content();
-            TBase64Codec* base64Inst = new (ELeave) TBase64Codec();
-            CleanupStack::PushL(base64Inst);
-            HBufC8* dataBuf = base64Inst->Base64DecodeLC(content);
-            HBufC8* fileBuf = base64Inst->Base64DecodeLC(*dataBuf);
-                       
-            //CA from getConf envelope
-            if ( aContentType == 1 && i==1 )
-                {
-                CAgileCryptoCert* agileClientCert = CAgileCryptoCert::NewL(fileBuf->Des(), EFalse);
-                CleanupStack::PushL(agileClientCert);
-                agileClientCert->SaveCACertL();
-                CleanupStack::PopAndDestroy(agileClientCert);
-                }
-            else if ( aContentType == 2)
-                {
-                CAgileCryptoCert* agileClientCert = CAgileCryptoCert::NewL(fileBuf->Des(), ETrue);
-                CleanupStack::PushL(agileClientCert);
-                agileClientCert->SaveClientCertL(iKeyRef,KPublicKeyLen);
-                CleanupStack::PopAndDestroy(agileClientCert);
-                }
-            else           
-                {
-                RFile file;
-                RFs iFs;
-                TInt err= iFs.Connect();
-                CleanupClosePushL(file);
-                User::LeaveIfError(file.Replace(iFs, aFileName, EFileWrite));
-                User::LeaveIfError(file.Write(*fileBuf));
-                
-                //write pin file
-                TInt vpnPinFilePathLth = KAgileProvisionPinFileName().Length() + KTempDirectory().Length();
-                HBufC* vpnPinFilePathBuf = HBufC::NewLC(vpnPinFilePathLth);
-                TPtr vpnPinFilePath(vpnPinFilePathBuf->Des());
-                vpnPinFilePath.Copy(KTempDirectory);
-                vpnPinFilePath.Append(KAgileProvisionPinFileName);
-                User::LeaveIfError(file.Replace(iFs, vpnPinFilePath, EFileWrite));
-                CleanupStack::PopAndDestroy(vpnPinFilePathBuf); // file                
-                file.Flush();
-                file.Close();
-                CleanupStack::PopAndDestroy(&file);
-                iFs.Close();
-                }
-            
-            
-			CleanupStack::PopAndDestroy(fileBuf);
-            CleanupStack::PopAndDestroy(dataBuf);
-            CleanupStack::PopAndDestroy(base64Inst);
-                       
-            
-            }
-  
-        //get the first child
-        CSenElement* child = pElement->Child(0);
-
-        //check if element has childs
-        if( child )
-            {
-            //get the child elements
-            RPointerArray<CSenElement>& tree = pElement->ElementsL();
-
-            //list child elements by a recursive call
-            ParseFileFromSoapEnvelopeL(tree, aContentType, ++aLevel, aFileName);
-            }
-        aLevel--;
-        } //for loop ends
-  }
-
-EXPORT_C void CAgileProvisionWs::GenerateCertReqL()
-    {
-    TRequestStatus status;
-    CAgileCryptoPrivKey* agileCryptoPrivKey = CAgileCryptoPrivKey::NewL();
-    CleanupStack::PushL(agileCryptoPrivKey);
-    CAgileCryptoGenerateKeypair* agileCryptoGenerateKeypair = CAgileCryptoGenerateKeypair::NewL(agileCryptoPrivKey);
-    CleanupStack::PushL(agileCryptoGenerateKeypair);
-    
-    // generate key
-    agileCryptoGenerateKeypair->GenerateKeypairL(KPublicKeyLen, iKeyRef, status);
-    User::WaitForRequest(status);
-    
-    // generate subjectname
-    _LIT8(KCnHeader, "CN=");
-    _LIT8(KCnUsername, "vpnuser");
-    TInt distinguishedNameLth = KCnHeader().Length() + KCnUsername().Length();
-    HBufC8* distinguishedNameHBuf = HBufC8::NewLC(distinguishedNameLth);
-    TPtr8 distinguishedName(distinguishedNameHBuf->Des());
-    distinguishedName.Copy(KCnHeader);
-    distinguishedName.Append(KCnUsername);
-
-    // generate certreq
-    const TInt KDmAdMaxCertReqRefLth = KMaxFileName;
-    HBufC* certReqRef = HBufC::NewLC(KDmAdMaxCertReqRefLth);
-    TPtr certReqRefPtr(certReqRef->Des());
-    TInt certReqSize;
-    
-    agileCryptoPrivKey->GenerateCertReqL(*distinguishedNameHBuf, //subjectname
-                                                           KNullDesC8, // subjectaltname
-                                                           KNullDesC8, //aChallengePassword,
-                                                           KNullDesC8, //DnsName,
-                                                           iKeyRef,
-                                                           certReqRefPtr,
-                                                           certReqSize);
-
-
-    // read certreq
-    TRetBufCertReq certReq;
-    certReq = agileCryptoPrivKey->ReadCertReqL(certReqRefPtr, certReqSize);
-    if ( iPService )
-        {
-        iPService->iCertreq = certReq;
-        }
-    else
-        {
-        delete certReq;
-        certReq=NULL;
-        }
-    
-    CleanupStack::PopAndDestroy(certReqRef);
-    CleanupStack::PopAndDestroy(distinguishedNameHBuf);
-    CleanupStack::PopAndDestroy(agileCryptoGenerateKeypair);
-    CleanupStack::PopAndDestroy(agileCryptoPrivKey);            
-    }
-
-void CAgileProvisionWs::DoComplete( const TInt aStatus )
-    {
-    if ( iClientStatus != NULL )
-        {
-        User::RequestComplete( iClientStatus,
-                               aStatus );
-        }
-    }