diff -r 000000000000 -r af10295192d8 networksecurity/ipsec/ipsecpolapi/src/ipsecpolapi.cpp --- /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 + +#include "ipsecpol.h" +#include "ipsecpolapi.h" +#include "clistatic.h" +#include + +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* 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 selectorCount(aCount); + SendReceive(EIpsecPolicyEnumerateSelectors, TIpcArgs(&aGateway, &selectorCount)); + } +