networksecurity/ipsec/ipsecpolapi/src/ipsecpolapi.cpp
changeset 0 af10295192d8
child 20 7e41d162e158
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networksecurity/ipsec/ipsecpolapi/src/ipsecpolapi.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,158 @@
+// Copyright (c) 2003-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:
+// Policy server - client interface implementation
+// 
+//
+
+#include <e32math.h>
+
+#include "ipsecpol.h"
+#include "ipsecpolapi.h"
+#include "clistatic.h"
+#include <e32base.h>
+
+EXPORT_C  RIpsecPolicyServ::RIpsecPolicyServ()
+    {
+    }
+
+EXPORT_C  RIpsecPolicyServ::~RIpsecPolicyServ()
+    {
+    }
+
+EXPORT_C TVersion RIpsecPolicyServ::Version() const
+    {
+    return(TVersion(KPolicyServMajorVersion,KPolicyServMinorVersion,KPolicyServBuildVersion));
+    }
+    
+EXPORT_C TInt RIpsecPolicyServ::Connect()
+//
+// Connect to the server attempting to start it if necessary
+//
+    {
+	TInt retry=2;
+	for (;;)
+		{
+		TInt r=CreateSession(KIpsecPolicyServerName,
+                             Version(),
+                             KDefaultMessageSlots);
+        
+		if (r!=KErrNotFound && r!=KErrServerTerminated)
+			return r;
+		if (--retry==0)
+			return r;
+		r = Launcher::LaunchServer(KIpsecPolicyServerName, KIpsecPolicyServerImg,
+                                     KServerUid3, KMyServerInitHeapSize,
+                                     KMyServerMaxHeapSize, KMyServerStackSize);
+
+		if (r!=KErrNone && r!=KErrAlreadyExists)
+			return r;
+		}
+	}
+	
+
+EXPORT_C void RIpsecPolicyServ::LoadPolicy(const TDesC8& aPolicy,
+                                           TPolicyHandlePckg& aPolicyHandle,
+                                           TRequestStatus& aStatus)
+/**
+@capability NetworkControl Only privileged apps can affect IPSec policies
+*/
+    {
+    SendReceive (EIpsecPolicyLoadPolicy,
+                 TIpcArgs(&aPolicy, &aPolicyHandle, &KNullDesC8, KAddIkeBypassSelectors),
+                 aStatus);
+    }
+
+
+EXPORT_C void RIpsecPolicyServ::LoadPolicy(const TDesC8& aPolicy,
+                             TPolicyHandlePckg& aPolicyHandle,
+                             TRequestStatus& aStatus,
+                             const TZoneInfoSetPckg& aSelectorZones,
+                             TUint aProcessingFlags)
+/**
+@capability NetworkControl Only privileged apps can affect IPSec policies
+*/
+    {
+    SendReceive (EIpsecPolicyLoadPolicy,
+                 TIpcArgs(&aPolicy, &aPolicyHandle, &aSelectorZones,aProcessingFlags),
+                 aStatus);
+    }
+
+EXPORT_C void RIpsecPolicyServ::CancelLoad()
+    {
+    SendReceive(EIpsecPolicyCancelLoad,TIpcArgs());
+    }
+   
+EXPORT_C void RIpsecPolicyServ::ActivatePolicy(const TPolicyHandle& aPolicyHandle,
+                                               TRequestStatus& aStatus)
+/**
+@capability NetworkControl Only privileged apps can affect IPSec policies
+*/
+    {
+    SendReceive(EIpsecPolicyActivatePolicy, TIpcArgs(aPolicyHandle.iHandle), aStatus);
+    }
+
+EXPORT_C void RIpsecPolicyServ::CancelActivate()
+    {
+    SendReceive(EIpsecPolicyCancelActivate,TIpcArgs());
+    }
+
+EXPORT_C TInt RIpsecPolicyServ::GetDebugInfo(TDes& aDebugInfo, TUint aInfoFlags)
+
+    {
+    return SendReceive(EIpsecPolicyGetLastConflictInfo, TIpcArgs(&aDebugInfo, aInfoFlags));
+    }
+    
+EXPORT_C void RIpsecPolicyServ::UnloadPolicy(const TPolicyHandle& aPolicyHandle, 
+                                             TRequestStatus& aStatus)
+/**
+@capability NetworkControl Only privileged apps can affect IPSec policies
+*/ 
+    {
+    SendReceive(EIpsecPolicyUnloadPolicy, TIpcArgs(aPolicyHandle.iHandle), aStatus);
+    }
+
+EXPORT_C void RIpsecPolicyServ::CancelUnload()
+    {
+    SendReceive(EIpsecPolicyCancelUnload, TIpcArgs());
+    }
+
+EXPORT_C void RIpsecPolicyServ::MatchSelector(const TDesC8& aProposal,
+                                        TDes8& aMatchingSASpec,
+                                        TRequestStatus& aStatus)
+    {
+    SendReceive(EIpsecPolicyMatchSelector, TIpcArgs(&aProposal, &aMatchingSASpec), aStatus);
+    }
+    
+EXPORT_C void RIpsecPolicyServ::CancelMatch()
+    {
+    SendReceive(EIpsecPolicyCancelMatch, TIpcArgs());
+    }
+
+EXPORT_C void RIpsecPolicyServ::AvailableSelectors(const TDesC8& aGateway, CArrayFixFlat<TIpsecSelectorInfo>* aSelectors, TRequestStatus& aStatus)
+	{
+	TInt count = 0;
+	EnumerateSelectors(aGateway, count);
+	
+	aSelectors->ResizeL(count);
+	
+	TPtr8 selectors((TUint8*)&aSelectors->At(0), count * aSelectors->Length());
+	SendReceive(EIpsecPolicyAvailableSelectors, TIpcArgs(&selectors), aStatus);
+	}
+	
+void RIpsecPolicyServ::EnumerateSelectors(const TDesC8& aGateway, TInt& aCount)
+	{
+	TPckg<TInt> selectorCount(aCount);
+    SendReceive(EIpsecPolicyEnumerateSelectors, TIpcArgs(&aGateway, &selectorCount));
+	}
+