--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/genericopenlibs/openenvcore/backend/src/corebackend/fdtransfer_cli.cpp Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,117 @@
+// Copyright (c) 2006-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:
+// file descriptor transfer session - client interface
+//
+//
+
+#include "fdtransfer_cli.h"
+#include "fdtransfermsg.h"
+#include "sysif.h"
+#include "fdesc.h"
+// -------------------------------------------------------------------------------
+// RFileDesTransferSession::Connect
+// -------------------------------------------------------------------------------
+TInt RFileDesTransferSession::Connect(TDesC& aServerName)
+ {
+ return CreateSession(aServerName, TVersion(0, 0, 0), 1);
+ }
+
+//--------------------------------------------------------------------------------
+//This passes the pipe to server
+//--------------------------------------------------------------------------------
+
+TInt RFileDesTransferSession::TransferPipesToServer()
+ {
+ const CFileTable& ftable = Backend()->FileTable();
+ int count = ftable.GetFileCount();
+ CFileDescBase* fdesc = NULL;
+ for (TInt i = count-1; i >=3 ; --i)
+ {
+ if (ftable.At(i, fdesc) == KErrNone)
+ {
+ TUint attr = fdesc->Attributes();
+ /* Named RPipes cannot be passed to another process by IPC
+ Hence the check for KFifoFd */
+ if ((attr & KPipeFd) && !(attr & KFifoFd) &&
+ !(attr & KCloseonExec) && !(attr & KSpawnCloseInChild))
+ {
+ SendReceive(ETransferPipe, TIpcArgs(i,((CPipeDescBase*)fdesc)->Handle(),fdesc->FcntlFlag()));
+ }
+ }
+
+ }
+ return KErrNone;
+ }
+
+//--------------------------------------------------------------------------------
+//This passes the files to server
+//--------------------------------------------------------------------------------
+TInt RFileDesTransferSession::TransferFilesToServer()
+ {
+ TBuf<256> fname;
+ const CFileTable& ftable = Backend()->FileTable();
+ CFileDescBase* fdesc = NULL;
+ int count = ftable.GetFileCount();
+ TInt j;
+ for (int i = count-1; i >=3; --i)
+ {
+ if (ftable.At(i, fdesc) == KErrNone)
+ {
+ j=fdesc->Type();
+ if((j==CFileDescBase::EFileDesc)||(j==CFileDescBase::EFileTempDesc))
+ {
+ CFileDesc* fp = (CFileDesc*)(fdesc);
+ if (fp)
+ {
+ TUint attr = fp->Attributes();
+ if (!(attr & KCloseonExec) && !(attr & KSpawnCloseInChild))
+ {
+ fp->FileHandle().FullName(fname);
+ TParsePtr pars(fname);
+ if (pars.Path().FindC(_L("\\PRIVATE\\")) != 0)
+ {
+
+ (Backend()->iFs).ShareProtected();
+ fp->DoSync();
+#if defined(SYMBIAN_OE_LARGE_FILE_SUPPORT) && !defined(SYMBIAN_OE_NO_LFS)
+ //The integer width is bigger for 64 bit sizes
+ TBuf<140> params;
+#else
+ TBuf<60> params;
+#endif /* SYMBIAN_OE_LARGE_FILE_SUPPORT && !SYMBIAN_OE_NO_LFS */
+ params.AppendNum(fp->Offset());
+ params.Append(' ');
+ params.AppendNum(fp->Extent());
+ params.Append(' ');
+ params.AppendNum(fp->FcntlFlag());
+ params.Append(' ');
+ params.AppendNum(fp->Attributes());
+ params.Append(' ');
+ params.AppendNum(fp->Pos());
+ params.Append(' ');
+ params.AppendNum(fp->Ext());
+ params.Append(' ');
+ params.AppendNum(fp->Size());
+ TIpcArgs args(i,¶ms);
+ if((fp->FileHandle()).TransferToServer(args, 2,3) == KErrNone)
+ SendReceive(ETransferFile, args);
+ (Backend()->iFs).ShareAuto();
+ }
+ }
+ }
+ }
+ }
+ } //for
+ return KErrNone;
+ }