networksecurity/ipsec/ipseccrypto/src/ipseccrypto.cpp
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networksecurity/ipsec/ipseccrypto/src/ipseccrypto.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,132 @@
+// Copyright (c) 2004-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:
+//
+
+#include <e32std.h>
+#include <es_prot_internal.h>
+#include "ipseccrypto.h"
+
+//
+// Local declarations, not needed by anyone else but this module
+//
+
+class CProtocolFamilyCryptoEay : public CProtocolFamilyBase
+	{
+    public:
+        CProtocolFamilyCryptoEay();
+        ~CProtocolFamilyCryptoEay();
+    public: 
+        TInt Install();
+        TInt Remove();
+        CProtocolBase *NewProtocolL(TUint aSockType, TUint aProtocol);
+        TUint ProtocolList(TServerProtocolDesc *& aProtocolList);
+	};
+
+// Force export of non-mangled name
+extern "C" { IMPORT_C CProtocolFamilyBase *Install(); }
+EXPORT_C CProtocolFamilyBase *Install()
+	{
+    return new CProtocolFamilyCryptoEay;
+	}
+
+//
+// Protocol Stub
+//
+
+CProtocolEay::CProtocolEay()
+	{
+    __DECLARE_NAME(_S("CProtocolIpsecCrypto"));
+	}
+
+//
+// This FillinInfo is total guesswork (as this is not a "real"
+// protocol, most (all?) of these are totally useless. The
+// key is to choose neutral values that won't cause the
+// socket manager to assume any special functionality of this
+// protocol.
+//
+// (declared as "pure" static to avoid cluttering the
+// CProtocolEay with unnecessary methods)
+//
+static void FillinInfo(TServerProtocolDesc &anEntry)
+	{
+    anEntry.iName=_S("ipseccrypto");
+    anEntry.iAddrFamily=KAfCrypto;
+    anEntry.iSockType=KSockRaw;
+    anEntry.iProtocol=KProtocolCrypto;
+    anEntry.iVersion=TVersion(1, 0, 0);
+    anEntry.iByteOrder=ELittleEndian;
+    anEntry.iServiceInfo=KSIStreamBased;
+    anEntry.iNamingServices = 0;
+    anEntry.iSecurity=KSocketNoSecurity;
+    anEntry.iMessageSize = KSocketMessageSizeIsStream;
+    anEntry.iServiceTypeInfo=ENeedMBufs;
+    anEntry.iNumSockets=KUnlimitedSockets;
+	}
+
+void CProtocolEay::Identify(TServerProtocolDesc *aInfo) const
+	{
+    FillinInfo(*aInfo);
+	}
+
+
+//
+// Protocol Family Stub
+//
+
+CProtocolFamilyCryptoEay::CProtocolFamilyCryptoEay()
+	{
+    __DECLARE_NAME(_S("CProtocolFamilyCryptoIpsecCrypto"));
+	}
+
+
+CProtocolFamilyCryptoEay::~CProtocolFamilyCryptoEay()
+	{
+	}
+
+
+TInt CProtocolFamilyCryptoEay::Install()
+	{
+    return KErrNone;
+	}
+
+
+TInt CProtocolFamilyCryptoEay::Remove()
+	{
+    return KErrNone;
+	}
+
+
+TUint CProtocolFamilyCryptoEay::ProtocolList(TServerProtocolDesc *& aProtocolList)
+	{
+    // This function should be a leaving fn
+    // apparently it is OK for it to leave
+    TServerProtocolDesc *p = new (ELeave) TServerProtocolDesc[1];
+
+    FillinInfo(p[0]);
+    // There should be no need for this below...
+    // TRAPD(res, Nif::CheckInstalledMBufManagerL();)
+    aProtocolList = p;
+    return 1;
+	}
+
+
+CProtocolBase* CProtocolFamilyCryptoEay::NewProtocolL(TUint /*aSockType*/, TUint aProtocol)
+	{
+    CProtocolBase *inprt = NULL;
+    if (aProtocol == KProtocolCrypto)
+        inprt = new (ELeave) CProtocolEay;
+    return inprt;
+	}
+