networksecurity/ipsec/ipsecpol/src/ipsecpolmanserver.cpp
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networksecurity/ipsec/ipsecpol/src/ipsecpolmanserver.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,150 @@
+// Copyright (c) 2006-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:
+// IPSecPolManServer.cpp - IPSec Policy Manager server main module
+//
+
+
+#include "ipsecpol.h"
+#include "ipsec_version.h"
+#include "ipsecpolmanserver.h"
+#include "ipsecpolmansession.h"
+#include "ipsecpolmanhandler.h"
+#include "ipsecpolapi.h"
+
+
+
+
+//platform security changes for IPSec Policy Manager
+
+//the number of platform security ranges
+const TUint CIPSecPolicyManagerServer::ipsecRangeCount = 2;
+
+//platform security ranges
+const TInt CIPSecPolicyManagerServer::ipsecRanges[ipsecRangeCount] = 
+    {
+    0, //range is 0-8 inclusive
+        9 //9, KMaxInt
+    };
+//policy elements defined for IpSec PolMan
+const CPolicyServer::TPolicyElement CIPSecPolicyManagerServer::ipsecElements[] = 
+    {
+    //this is the policy enforced by IpSec Policy Manager
+        {_INIT_SECURITY_POLICY_C1(ECapabilityNetworkControl), CPolicyServer::EFailClient}, 
+    };
+
+//security policies defined
+const TUint8 CIPSecPolicyManagerServer::elementIndex[ipsecRangeCount] = 
+    {
+    0,0
+    };
+
+const CPolicyServer::TPolicy CIPSecPolicyManagerServer::ipsecPolicy =
+    {
+    0, //specifies all connect attempts should be checked for NetworkControl capability
+        ipsecRangeCount,
+        ipsecRanges,
+        elementIndex,
+        ipsecElements
+    };
+
+
+
+//
+//  Constructor that takes sets a security policy when called
+//
+CIPSecPolicyManagerServer::CIPSecPolicyManagerServer(void):CPolicyServer(EPriorityStandard,ipsecPolicy)
+    {
+    iSessionCount = 0;
+    }
+
+//
+//  
+//
+CIPSecPolicyManagerServer::~CIPSecPolicyManagerServer(void)
+    {
+    delete iIPSecPolicyManagerHandler;
+    iIPSecPolicyManagerHandler = 0;
+    }
+
+//
+// Create CIPSecPolicyManagerServer object
+// 
+//
+CIPSecPolicyManagerServer* CIPSecPolicyManagerServer::NewL(void)
+    {
+    CIPSecPolicyManagerServer* self = CIPSecPolicyManagerServer::NewLC();
+    CleanupStack::Pop(); // self
+    return self;
+    }
+
+CIPSecPolicyManagerServer* CIPSecPolicyManagerServer::NewLC(void)
+    {
+    CIPSecPolicyManagerServer* self;
+    self = new(ELeave) CIPSecPolicyManagerServer;
+    CleanupStack::PushL(self);
+    self->StartL(KIpsecPolicyServerName);
+    return self;
+    }
+
+//
+//  
+//
+TInt CIPSecPolicyManagerServer::RunError(TInt aError)
+    {
+    // delete allocated resources
+    if (iIPSecPolicyManagerHandler != NULL)
+        {
+        iIPSecPolicyManagerHandler->ReleaseResources();
+        }
+    
+    // Complete the outstanding message
+    Message().Complete(aError);
+    // ready to roll again
+    ReStart(); // really means just continue reading client requests
+    
+    return KErrNone; // Active scheduler Error() method NOT called          
+    }
+
+//
+// Stop IPSec Policy Manager service if no session exist 
+//  
+void CIPSecPolicyManagerServer::StopIPSecPolicyManagerServer(void)
+    {
+	if (iSessionCount == 0)
+		{
+		if (iIPSecPolicyManagerHandler != NULL)
+			{
+			if(iIPSecPolicyManagerHandler->iActivePolicyList->Count() == 0)
+			  {
+			  delete iIPSecPolicyManagerHandler;
+			  iIPSecPolicyManagerHandler = 0;
+			  CActiveScheduler::Stop();
+			  }
+			 }
+			else
+			  CActiveScheduler::Stop(); 
+		}
+    }
+
+//
+// A client has issued Connect request and kernel calls this function
+// that creates a server side session. 
+//  
+
+CSession2* CIPSecPolicyManagerServer::NewSessionL(const TVersion& ,
+                                                  const RMessage2& ) const
+    {
+    CSession2* session = CIPSecPolicyManagerSession::NewL(CONST_CAST(CIPSecPolicyManagerServer*, this));
+    return session;
+    }