datacommsserver/esockserver/ssock/SS_EXTN.CPP
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/ssock/SS_EXTN.CPP	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,130 @@
+// Copyright (c) 1997-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:
+// ESock external utils 
+// 
+//
+
+/**
+ @file
+*/
+
+#include <ss_pman.h>
+#include <ss_std.h>
+#include <comms-infras/ss_log.h>
+
+EXPORT_C CProtocolBase* SocketServExt::FindAndLoadProtocolL(const TDesC& aName, TProtocolType aType)
+/**
+Find a protocol by name and load it.
+Caller is responsible for ultimately deleting the protocol
+
+*/
+	{
+	return ProtocolManager::FindAndLoadProtocolL(aName, aType);
+	}
+
+EXPORT_C CProtocolBase* SocketServExt::FindAndLoadProtocolL(TUint aAddrFamily,TUint aSockType,TUint aProtocol)
+/**
+Find a protocol by address family, socket type and protocol ID and load it.
+Caller is responsible for ultimately deleting the protocol
+*/
+	{
+	return ProtocolManager::FindAndLoadProtocolL(aAddrFamily, aSockType, aProtocol);
+	}
+
+EXPORT_C void SocketServExt::InstallExtensionL(const TDesC& aDllName, const TDesC& aArgs)
+/**
+Installs an Esock extension dll
+
+*/
+	{
+	SocketServer::InstallExtensionL(aDllName, aArgs);
+	}
+
+EXPORT_C void SocketServExt::OpenSession()
+  	{
+	// Before 9.1 this provided extensions (ie NifMan) the ability to defer spontaneous shutdown. Now obsolete but retained for compatibility
+	}
+
+EXPORT_C void SocketServExt::CloseSession()
+	{
+	// Before 9.1 this provided extensions (ie NifMan) the ability to defer spontaneous shutdown. Now obsolete but retained for compatibility
+	}
+
+EXPORT_C void SocketServExt::InstallSchedulerWaitHook(TCallBack* /*aCall*/)
+	{
+//	CSocketScheduler::SetWaitHook(aCall);
+	}
+
+EXPORT_C CSocketServExtBase::CSocketServExtBase()
+	{
+	__DECLARE_NAME(_S("CSocketServExtBase"));
+	}
+
+EXPORT_C CSocketServExtBase::~CSocketServExtBase()
+	{
+//	if (iExtRef)
+//		delete iExtRef;
+	}
+
+CSocketServExtRef::CSocketServExtRef()
+	{
+	__DECLARE_NAME(_S("CSocketServExtRef"));
+	iExtLink.iPrev = &iExtLink;
+	iExtLink.iNext = &iExtLink;
+	}
+
+CSocketServExtRef::~CSocketServExtRef()
+	{
+	iExtLink.Deque();
+	}
+
+static void CloseLibrary(TAny* aLib)
+	{
+	
+	((RLibrary*)aLib)->Close();
+	}
+
+void CSocketServExtRef::InstallL(const TDesC& aDllName, const TDesC& aArgs)
+/**
+installs an extension
+*/
+	{
+	LOG(TBuf8<64> buf8);
+	LOG(buf8.Copy(aDllName));
+	LOG(ESockLog::Printf(_L8("Loading extension '%S'"), &buf8));
+	User::LeaveIfError(iLibrary.Load(aDllName));
+	CleanupStack::PushL(TCleanupItem(CloseLibrary, &iLibrary));
+	TSocketServExtInstallFn entry = (TSocketServExtInstallFn)iLibrary.Lookup(1);
+	CSocketServExtBase* sx = entry();
+	User::LeaveIfNull(sx);
+	CleanupStack::PushL(sx);
+	sx->InstallL(aArgs);
+	iExtension = sx;
+	sx->iExtRef = this;
+	CleanupStack::Pop(2);
+	}
+
+void CSocketServExtRef::Remove()
+	{
+	if (iExtension)
+		iExtension->Remove();
+	}
+
+void CSocketServExtRef::Close()
+	{
+	if (iExtension)
+		delete iExtension;
+	iLibrary.Close();
+	}
+