networksecurity/ipsec/ipsecpolapi/src/ipsecpolapi.cpp
changeset 0 af10295192d8
child 20 7e41d162e158
equal deleted inserted replaced
-1:000000000000 0:af10295192d8
       
     1 // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // Policy server - client interface implementation
       
    15 // 
       
    16 //
       
    17 
       
    18 #include <e32math.h>
       
    19 
       
    20 #include "ipsecpol.h"
       
    21 #include "ipsecpolapi.h"
       
    22 #include "clistatic.h"
       
    23 #include <e32base.h>
       
    24 
       
    25 EXPORT_C  RIpsecPolicyServ::RIpsecPolicyServ()
       
    26     {
       
    27     }
       
    28 
       
    29 EXPORT_C  RIpsecPolicyServ::~RIpsecPolicyServ()
       
    30     {
       
    31     }
       
    32 
       
    33 EXPORT_C TVersion RIpsecPolicyServ::Version() const
       
    34     {
       
    35     return(TVersion(KPolicyServMajorVersion,KPolicyServMinorVersion,KPolicyServBuildVersion));
       
    36     }
       
    37     
       
    38 EXPORT_C TInt RIpsecPolicyServ::Connect()
       
    39 //
       
    40 // Connect to the server attempting to start it if necessary
       
    41 //
       
    42     {
       
    43 	TInt retry=2;
       
    44 	for (;;)
       
    45 		{
       
    46 		TInt r=CreateSession(KIpsecPolicyServerName,
       
    47                              Version(),
       
    48                              KDefaultMessageSlots);
       
    49         
       
    50 		if (r!=KErrNotFound && r!=KErrServerTerminated)
       
    51 			return r;
       
    52 		if (--retry==0)
       
    53 			return r;
       
    54 		r = Launcher::LaunchServer(KIpsecPolicyServerName, KIpsecPolicyServerImg,
       
    55                                      KServerUid3, KMyServerInitHeapSize,
       
    56                                      KMyServerMaxHeapSize, KMyServerStackSize);
       
    57 
       
    58 		if (r!=KErrNone && r!=KErrAlreadyExists)
       
    59 			return r;
       
    60 		}
       
    61 	}
       
    62 	
       
    63 
       
    64 EXPORT_C void RIpsecPolicyServ::LoadPolicy(const TDesC8& aPolicy,
       
    65                                            TPolicyHandlePckg& aPolicyHandle,
       
    66                                            TRequestStatus& aStatus)
       
    67 /**
       
    68 @capability NetworkControl Only privileged apps can affect IPSec policies
       
    69 */
       
    70     {
       
    71     SendReceive (EIpsecPolicyLoadPolicy,
       
    72                  TIpcArgs(&aPolicy, &aPolicyHandle, &KNullDesC8, KAddIkeBypassSelectors),
       
    73                  aStatus);
       
    74     }
       
    75 
       
    76 
       
    77 EXPORT_C void RIpsecPolicyServ::LoadPolicy(const TDesC8& aPolicy,
       
    78                              TPolicyHandlePckg& aPolicyHandle,
       
    79                              TRequestStatus& aStatus,
       
    80                              const TZoneInfoSetPckg& aSelectorZones,
       
    81                              TUint aProcessingFlags)
       
    82 /**
       
    83 @capability NetworkControl Only privileged apps can affect IPSec policies
       
    84 */
       
    85     {
       
    86     SendReceive (EIpsecPolicyLoadPolicy,
       
    87                  TIpcArgs(&aPolicy, &aPolicyHandle, &aSelectorZones,aProcessingFlags),
       
    88                  aStatus);
       
    89     }
       
    90 
       
    91 EXPORT_C void RIpsecPolicyServ::CancelLoad()
       
    92     {
       
    93     SendReceive(EIpsecPolicyCancelLoad,TIpcArgs());
       
    94     }
       
    95    
       
    96 EXPORT_C void RIpsecPolicyServ::ActivatePolicy(const TPolicyHandle& aPolicyHandle,
       
    97                                                TRequestStatus& aStatus)
       
    98 /**
       
    99 @capability NetworkControl Only privileged apps can affect IPSec policies
       
   100 */
       
   101     {
       
   102     SendReceive(EIpsecPolicyActivatePolicy, TIpcArgs(aPolicyHandle.iHandle), aStatus);
       
   103     }
       
   104 
       
   105 EXPORT_C void RIpsecPolicyServ::CancelActivate()
       
   106     {
       
   107     SendReceive(EIpsecPolicyCancelActivate,TIpcArgs());
       
   108     }
       
   109 
       
   110 EXPORT_C TInt RIpsecPolicyServ::GetDebugInfo(TDes& aDebugInfo, TUint aInfoFlags)
       
   111 
       
   112     {
       
   113     return SendReceive(EIpsecPolicyGetLastConflictInfo, TIpcArgs(&aDebugInfo, aInfoFlags));
       
   114     }
       
   115     
       
   116 EXPORT_C void RIpsecPolicyServ::UnloadPolicy(const TPolicyHandle& aPolicyHandle, 
       
   117                                              TRequestStatus& aStatus)
       
   118 /**
       
   119 @capability NetworkControl Only privileged apps can affect IPSec policies
       
   120 */ 
       
   121     {
       
   122     SendReceive(EIpsecPolicyUnloadPolicy, TIpcArgs(aPolicyHandle.iHandle), aStatus);
       
   123     }
       
   124 
       
   125 EXPORT_C void RIpsecPolicyServ::CancelUnload()
       
   126     {
       
   127     SendReceive(EIpsecPolicyCancelUnload, TIpcArgs());
       
   128     }
       
   129 
       
   130 EXPORT_C void RIpsecPolicyServ::MatchSelector(const TDesC8& aProposal,
       
   131                                         TDes8& aMatchingSASpec,
       
   132                                         TRequestStatus& aStatus)
       
   133     {
       
   134     SendReceive(EIpsecPolicyMatchSelector, TIpcArgs(&aProposal, &aMatchingSASpec), aStatus);
       
   135     }
       
   136     
       
   137 EXPORT_C void RIpsecPolicyServ::CancelMatch()
       
   138     {
       
   139     SendReceive(EIpsecPolicyCancelMatch, TIpcArgs());
       
   140     }
       
   141 
       
   142 EXPORT_C void RIpsecPolicyServ::AvailableSelectors(const TDesC8& aGateway, CArrayFixFlat<TIpsecSelectorInfo>* aSelectors, TRequestStatus& aStatus)
       
   143 	{
       
   144 	TInt count = 0;
       
   145 	EnumerateSelectors(aGateway, count);
       
   146 	
       
   147 	aSelectors->ResizeL(count);
       
   148 	
       
   149 	TPtr8 selectors((TUint8*)&aSelectors->At(0), count * aSelectors->Length());
       
   150 	SendReceive(EIpsecPolicyAvailableSelectors, TIpcArgs(&selectors), aStatus);
       
   151 	}
       
   152 	
       
   153 void RIpsecPolicyServ::EnumerateSelectors(const TDesC8& aGateway, TInt& aCount)
       
   154 	{
       
   155 	TPckg<TInt> selectorCount(aCount);
       
   156     SendReceive(EIpsecPolicyEnumerateSelectors, TIpcArgs(&aGateway, &selectorCount));
       
   157 	}
       
   158