plugins/networking/winsockprt/src/wsp_protocol.cpp
changeset 0 7f656887cf89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/networking/winsockprt/src/wsp_protocol.cpp	Wed Jun 23 15:52:26 2010 +0100
@@ -0,0 +1,222 @@
+// wsp_protocol.cpp
+// 
+// Copyright (c) 2002 - 2010 Accenture. All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the "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:
+// Accenture - Initial contribution
+//
+
+
+#include <winsockprt.h>
+#include "wsp_protocol.h"
+#include "wsp_provider.h"
+#include "wsp_factory.h"
+#include "wsp_resolver.h"
+#include "wsp_panic.h"
+#include "wsp_def.h"
+#include "wsp_log.h"
+
+
+CWinSockProtocol::~CWinSockProtocol()
+	{
+	}
+
+CWinSockProtocol::CWinSockProtocol(TUint aSocketType, RWin32Factory& aWin32Factory)
+	: iSocketType(aSocketType), iWin32Factory(aWin32Factory)
+	{
+	}
+
+CWinSockProtocol* CWinSockProtocol::NewL(TUint aSocketType, RWin32Factory& aWin32Factory)
+	{
+	CWinSockProtocol* self = new(ELeave) CWinSockProtocol(aSocketType, aWin32Factory);
+	return self;
+	}
+
+void CWinSockProtocol::ProtocolIdentity(TServerProtocolDesc* aDesc, TUint aSocketType, TUint aProtocol)
+	{
+	switch (aSocketType)
+		{
+		case KSockStream:
+			{
+			aDesc->iName = (aProtocol == KProtocolWinsockTcp) ? _S("winsocktcp") : _S("tcp");
+			aDesc->iAddrFamily = KAfInet;
+			aDesc->iSockType = KSockStream;
+			aDesc->iProtocol = aProtocol;
+			aDesc->iVersion = TVersion(KWspMajorVersionNumber, KWspMinorVersionNumber, KWspBuildVersionNumber);
+			aDesc->iByteOrder = EBigEndian;
+			aDesc->iServiceInfo = KSIStreamBased | KSIInOrder | KSIReliable | KSIGracefulClose;
+			aDesc->iNamingServices = KNSNameResolution;
+			aDesc->iSecurity = KSocketNoSecurity;
+			aDesc->iMessageSize = KSocketMessageSizeIsStream;
+			aDesc->iServiceTypeInfo = ESocketSupport | EUseCanSend;
+			aDesc->iNumSockets = KUnlimitedSockets;
+			return;
+			}
+		case KSockDatagram:
+			{
+			if (aProtocol == KProtocolWinsockUdp)
+				{
+				aDesc->iName =  _S("winsockudp");
+				}
+			else if (aProtocol == KProtocolInetUdp)
+				{
+				aDesc->iName = _S("udp");
+				}
+			else if (aProtocol == KProtocolInetIp)
+				{
+				aDesc->iName = _S("ip");
+				}
+			aDesc->iAddrFamily = KAfInet;
+			aDesc->iSockType = KSockDatagram;
+			aDesc->iProtocol = aProtocol;
+			aDesc->iVersion = TVersion(KWspMajorVersionNumber,	KWspMinorVersionNumber, KWspBuildVersionNumber);
+			aDesc->iByteOrder = EBigEndian;
+			aDesc->iServiceInfo = KSIConnectionLess | KSIDatagram | KSIGracefulClose;
+			aDesc->iNamingServices = KNSNameResolution;
+			aDesc->iSecurity = KSocketNoSecurity;
+			aDesc->iMessageSize = 65536-128; /*KSocketMessageSizeUndefined;*/
+			aDesc->iServiceTypeInfo = ESocketSupport | EUseCanSend;
+			aDesc->iNumSockets = KUnlimitedSockets;
+			return;
+			}
+		}
+	}
+
+CServProviderBase* CWinSockProtocol::NewSAPL(TUint aProtocol)
+	{
+	WSP_LOG(WspLog::Write(_L("CWinSockProtocol::NewSAPL")));
+
+	CWinSockProviderBase* provider = NULL;
+
+	switch (iSocketType)
+		{
+		case KSockStream:
+			{
+			provider = CWinSockTcpProvider::NewL(iWin32Factory);
+			break;
+			}
+		case KSockDatagram:
+			{
+			provider = CWinSockUdpProvider::NewL(iWin32Factory);
+			break;
+			}
+		default:
+			{
+			__ASSERT_DEBUG(EFalse, Panic(EWinSockPrtCWinSockProtocolNewSAPLInvalidProtocol));
+			}
+		}
+
+	iProtocol = aProtocol;
+	
+	return provider;
+	}
+
+void CWinSockProtocol::Identify(TServerProtocolDesc* aDesc) const
+	{
+	CWinSockProtocol::ProtocolIdentity(aDesc, iSocketType, iProtocol);
+	}
+
+void CWinSockProtocol::BindL(CProtocolBase* /*aProtocol*/, TUint /*anId*/)
+	{
+	__ASSERT_DEBUG(EFalse, Panic(EWinSockPrtUnexpectedBindRequestFromPeer));
+	}
+
+void CWinSockProtocol::BindToL(CProtocolBase* /*protocol*/)
+	{
+	__ASSERT_DEBUG(EFalse, Panic(EWinSockPrtUnexpectedBindToRequestFromSocketServer));
+	}
+
+TInt CWinSockProtocol::Send(RMBufChain &,CProtocolBase* /*aSourceProtocol*/)
+	{
+	__ASSERT_DEBUG(EFalse, Panic(EWinSockPrtUnexpectedSendDownCallFromBindee));
+	return 0;
+	}
+
+void CWinSockProtocol::Process(RMBufChain &,CProtocolBase* /*aSourceProtocol*/)
+	{
+	__ASSERT_DEBUG(EFalse, Panic(EWinSockPrtUnexpectedProcessUpCallFromBindee));
+	}
+
+TInt CWinSockProtocol::Send(TDes8 &, TSockAddr* /*to*/,TSockAddr* /*from*/,CProtocolBase* /*aSourceProtocol*/)
+	{
+	__ASSERT_DEBUG(EFalse, Panic(EWinSockPrtUnexpectedSendDownCallFromBindee));
+	return KErrNone;
+	}
+
+void CWinSockProtocol::Process(TDes8&,TSockAddr* /*from*/,TSockAddr* /*to*/,CProtocolBase* /*aSourceProtocol*/)
+	{
+	__ASSERT_DEBUG(EFalse, Panic(EWinSockPrtUnexpectedProcessUpCallFromBindee));
+	}
+
+
+TInt CWinSockProtocol::GetOption(TUint aLevel,TUint aName,TDes8& aOption,CProtocolBase*)
+	{
+	if ((aLevel == KNifOptLevel) && (aName == KNifOptGetNifIfUser))
+		{
+		static_cast<TNifIfUser&>(aOption) = this;
+		return KErrNone;
+		}
+	return KErrNotSupported;
+	}
+
+TInt CWinSockProtocol::SetOption(TUint /*level*/,TUint /*name*/,const TDesC8& /*option*/,CProtocolBase* /*aSourceProtocol*/)
+	{
+	return KErrNotSupported;
+	}
+
+void CWinSockProtocol::Error(TInt /*anError*/,CProtocolBase* /*aSourceProtocol*/)
+	{
+	__ASSERT_DEBUG(EFalse, Panic(EWinSockPrtUnexpectedErrorUpCallFromBindee));
+	}
+
+CHostResolvProvdBase* CWinSockProtocol::NewHostResolverL()
+	{
+	WSP_LOG(WspLog::Write(_L("CWinSockProtocol::NewHostResolverL")));
+	return CWinSockResolver::NewL(iWin32Factory);
+	}
+
+CServiceResolvProvdBase* CWinSockProtocol::NewServiceResolverL()
+	{
+	return NULL;
+	}
+
+CNetDBProvdBase* CWinSockProtocol::NewNetDatabaseL()
+	{
+	return NULL;
+	}
+
+void CWinSockProtocol::IfUserBindFailure(TInt, TAny*)
+	{
+	}
+
+void CWinSockProtocol::IfUserNewInterfaceL(CNifIfBase*, TAny*)
+	{
+	}
+
+void CWinSockProtocol::IfUserInterfaceDown(TInt, CNifIfBase*)
+	{
+	}
+
+void CWinSockProtocol::IfUserOpenNetworkLayer()
+	{
+	Open();
+	}
+
+void CWinSockProtocol::IfUserCloseNetworkLayer()
+	{
+	Close();
+	}
+
+CProtocolBase* CWinSockProtocol::IfUserProtocol()
+	{
+	return this;
+	}
+
+TBool CWinSockProtocol::IfUserIsNetworkLayerActive()
+	{
+	}
+