diff -r 000000000000 -r 7f656887cf89 plugins/networking/winsockprt/src/wsp_protocol.cpp --- /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 +#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(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() + { + } +