--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/networking/winsockprt/src/wsp_protocolfamily.cpp Wed Jun 23 15:52:26 2010 +0100
@@ -0,0 +1,96 @@
+// wsp_protocolfamily.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 <f32file.h>
+#undef SYMBIAN_ENABLE_SPLIT_HEADERS // More tb92 stopgaps, this time for es_sock_partner.h
+#include <winsockprt.h>
+#include <in_sock.h>
+#include "wsp_protocolfamily.h"
+#include "wsp_protocol.h"
+#include "wsp_log.h"
+
+
+CWinSockProtocolFamily::~CWinSockProtocolFamily()
+ {
+ WSP_LOG(WspLog::Write(_L("CWinSockProtocolFamily::~CWinSockProtocolFamily")));
+ if (iWin32Factory)
+ {
+ iWin32Factory->Close();
+ delete iWin32Factory;
+ }
+ WSP_LOG(WspLog::Close());
+ }
+
+CWinSockProtocolFamily::CWinSockProtocolFamily()
+ {
+ }
+
+CWinSockProtocolFamily* CWinSockProtocolFamily::NewL()
+ {
+ WSP_LOG(WspLog::Write(_L("CWinSockProtocolFamily::NewL")));
+ return new(ELeave) CWinSockProtocolFamily();
+ }
+
+TInt CWinSockProtocolFamily::Install()
+ {
+ return KErrNone;
+ }
+
+CProtocolBase* CWinSockProtocolFamily::NewProtocolL(TUint aSockType, TUint /*aProtocol*/)
+ {
+ WSP_LOG(WspLog::Printf(_L("CWinSockProtocolFamily::NewProtocolL, socket type: %d"), aSockType));
+ if (iWin32Factory == NULL)
+ {
+ RWin32Factory* factory = new(ELeave) RWin32Factory();
+ CleanupStack::PushL(factory);
+ User::LeaveIfError(factory->Open());
+ CleanupStack::Pop(factory);
+ iWin32Factory = factory;
+ }
+ return CWinSockProtocol::NewL(aSockType, *iWin32Factory);
+ }
+
+TUint CWinSockProtocolFamily::ProtocolList(TServerProtocolDesc*& aProtocolList)
+ {
+ TBool realTcpipActive(EFalse);
+ TRAP_IGNORE(realTcpipActive = RealTcpipActiveL());
+ const TInt numProtocols = realTcpipActive ? 2 : 5;
+ TRAPD(ret, aProtocolList=new(ELeave) TServerProtocolDesc[numProtocols]);
+ if (ret != KErrNone)
+ {
+ return 0;
+ }
+
+ CWinSockProtocol::ProtocolIdentity(&aProtocolList[0], KSockStream, KProtocolWinsockTcp);
+ CWinSockProtocol::ProtocolIdentity(&aProtocolList[1], KSockDatagram, KProtocolWinsockUdp);
+ if (!realTcpipActive)
+ {
+ CWinSockProtocol::ProtocolIdentity(&aProtocolList[2], KSockStream, KProtocolInetTcp);
+ CWinSockProtocol::ProtocolIdentity(&aProtocolList[3], KSockDatagram, KProtocolInetUdp);
+ CWinSockProtocol::ProtocolIdentity(&aProtocolList[4], KSockDatagram, KProtocolInetIp);
+ }
+
+ return numProtocols;
+ }
+
+TBool CWinSockProtocolFamily::RealTcpipActiveL() const
+ {
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+ TUint att;
+ _LIT(KTcpipEskFileName, "c:\\Private\\101f7989\\esock\\ip.tcpip.esk");
+ TBool active = (fs.Att(KTcpipEskFileName, att) == KErrNone);
+ CleanupStack::PopAndDestroy(&fs);
+ return active;
+ }