vpnengine/agileprovisionws/src/agileprovisionservice.cpp
branchRCL_3
changeset 22 9f4e37332ce5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/agileprovisionws/src/agileprovisionservice.cpp	Thu Aug 19 10:54:34 2010 +0300
@@ -0,0 +1,162 @@
+/*
+* 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 service 
+*
+*/
+
+#include <SenXmlServiceDescription.h>
+#include <SenSoapMessage.h>
+#include <SenHttpTransportProperties.h>
+#include <e32debug.h>
+#include <cmmanagerext.h>
+#include <cmdestinationext.h>
+#include "agileprovisionservice.h"
+#include "agileprovisiondefs.h"
+
+
+CAgileProvisionServiceService* CAgileProvisionServiceService::NewL(MSenServiceConsumer& aObserver, MSenServiceDescription& aServiceDescription)
+{
+    CSenServiceConnection* pConn = CSenServiceConnection::NewLC(aObserver, aServiceDescription);
+    
+    CAgileProvisionServiceService* pNew = new (ELeave) CAgileProvisionServiceService(pConn, ETrue); // owns connection
+    
+    CleanupStack::Pop(pConn);
+    return pNew;
+}
+
+
+CAgileProvisionServiceService::CAgileProvisionServiceService(CSenServiceConnection* aConnection, TBool aOwnsConnection) :
+    iConnection(aConnection), iOwnsConnection(aOwnsConnection)
+{
+}
+
+CAgileProvisionServiceService::~CAgileProvisionServiceService()
+{
+    delete iCertreq;
+    iCertreq=NULL;
+    if (iOwnsConnection)
+    {
+        delete iConnection;
+    }
+   
+}
+
+
+void CAgileProvisionServiceService::GetConfAsyncL()
+{
+    TPtrC8 reqStr;
+ 
+    CSenSoapMessage *soapRequest = CSenSoapMessage::NewL();
+    CleanupStack::PushL(soapRequest);
+    
+    TPtrC8 soapActionPtr(KSoapAction);
+    soapRequest->SetSoapActionL( soapActionPtr );
+     
+    
+    TPtrC8 reqBodyStr(KRequest);
+    soapRequest->SetBodyL(reqBodyStr);
+   
+    CSenHttpTransportProperties* pHttpProperties = CSenHttpTransportProperties::NewLC();    
+    
+    using namespace CMManager;
+       
+    RCmManagerExt cmManagerExt;
+    cmManagerExt.OpenL();        
+    CleanupClosePushL( cmManagerExt );     
+
+    RArray<TUint32> destinationArray;    
+    cmManagerExt.AllDestinationsL( destinationArray );
+    CleanupClosePushL(destinationArray);    
+    TBool destinationExist=EFalse;       
+    for (TInt i = 0; i < destinationArray.Count(); ++i)
+        {
+        RCmDestinationExt destination = cmManagerExt.DestinationL( destinationArray[i] );
+        CleanupClosePushL(destination);
+       
+        if ( destination.Id() == iIapId )
+            {
+             destinationExist=ETrue;
+             CleanupStack::PopAndDestroy(); //destination
+             break;
+            }                
+        CleanupStack::PopAndDestroy(); //destination
+        }
+    destinationArray.Reset();
+    destinationArray.Close();
+    CleanupStack::PopAndDestroy(2); //destinationArray, cmManagerExt
+    
+    if ( destinationExist == 1 ) //ETrue
+        {
+        pHttpProperties->SetSnapIdL(iIapId);
+        }
+    else
+        {
+        pHttpProperties->SetIapIdL(iIapId);
+        }
+    
+    HBufC8* pSerializedProperties = pHttpProperties->AsUtf8L();
+    CleanupStack::PushL(pSerializedProperties);
+    iConnection->SetTransportPropertiesL(*pSerializedProperties);
+       
+    TInt ret = iConnection->SendL(*soapRequest);
+    User::LeaveIfError( ret );
+   
+    iTransactionId = ret ;
+    CleanupStack::PopAndDestroy(pSerializedProperties);
+    CleanupStack::PopAndDestroy(pHttpProperties);
+    CleanupStack::PopAndDestroy(soapRequest);
+}
+
+
+void CAgileProvisionServiceService::GetCertificateAsyncL( HBufC8* aCertReq )
+{
+    TPtrC8 reqStr;
+    
+    CSenSoapMessage *soapRequest = CSenSoapMessage::NewL();
+    CleanupStack::PushL(soapRequest);
+    soapRequest->SetSoapActionL( KSoapActionCert );
+    
+    TBase64Codec base64Codec;    
+    HBufC8* certreqBase64 = base64Codec.Base64EncodeLC(*aCertReq);
+    HBufC8* certReqBodyHeap=HBufC8::NewLC(KRequest1().Length() + KRequest2().Length() + certreqBase64->Length());
+    TPtr8 certReqBodyAppend(certReqBodyHeap->Des());
+    certReqBodyAppend=KRequest1;
+    certReqBodyAppend.Append(certreqBase64->Des());
+    certReqBodyAppend.Append(KRequest2);
+    
+    TPtrC8 reqBodyStr(certReqBodyAppend);
+    soapRequest->SetBodyL(reqBodyStr);
+
+    TInt ret = iConnection->SendL(*soapRequest);
+    User::LeaveIfError( ret );
+    iTransactionId = ret;
+    CleanupStack::PopAndDestroy(); //certReqBodyHeap
+    CleanupStack::PopAndDestroy(); //certreqBase64
+    CleanupStack::PopAndDestroy(); // soapRequest
+}
+
+
+void CAgileProvisionServiceService::CancelTransaction()
+{
+    if ( iTransactionId > 0 )
+    {
+        iConnection->CancelTransaction( iTransactionId );
+        iTransactionId = 0;
+    }
+}
+
+void CAgileProvisionServiceService::ResetTransactionId()
+{
+    iTransactionId = 0;
+}