remotestoragefw/webdavaccessplugin/src/rsfwdavaccess.cpp
changeset 13 6b4fc789785b
parent 2 c32dc0be5eb4
--- a/remotestoragefw/webdavaccessplugin/src/rsfwdavaccess.cpp	Mon Jan 18 21:00:57 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1179 +0,0 @@
-/*
-* Copyright (c) 2002-2004 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:  Implements remote access plugin API using WebDAV protocol
- *
-*/
-
-
-// INCLUDE FILES
-#include "rsfwdavaccess.h"
-#include "rsfwdavfileinfo.h"
-#include "rsfwdavaccesscontext.h"
-#include "rsfwdavtransaction.h"
-#include "mdebug.h"
-
-
-// ============================ MEMBER FUNCTIONS ==============================
-
-void CRsfwDavAccess::ConstructL()
-    {
-    }
-
-CRsfwDavAccess* CRsfwDavAccess::NewL()
-    {
-    CRsfwDavAccess* self = new (ELeave) CRsfwDavAccess;
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-CRsfwDavAccess::~CRsfwDavAccess()
-    {
-    delete iWebDavSession;
-    iDavFileInfos.ResetAndDestroy();
-    iDavAccessContexts.ResetAndDestroy(); 
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::DavFileInfoL
-// Find the file info for the given file name.
-// ----------------------------------------------------------------------------
-//
-CRsfwDavFileInfo* CRsfwDavAccess::DavFileInfoL(const TDesC& aName)
-    {
-    TInt index = DavFileInfoIndexL(aName);
-    if (index != KErrNotFound)
-        {
-        return iDavFileInfos[index];
-        }
-    return NULL;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::AddDavFileInfo
-// Add a new file info entry.
-// ----------------------------------------------------------------------------
-//
-void CRsfwDavAccess::AddDavFileInfo(CRsfwDavFileInfo* aDavFileInfo)
-    {
-#ifdef _DEBUG
-    TPtrC namePtr;
-    if (aDavFileInfo->Name())
-        {
-        namePtr.Set(*aDavFileInfo->Name());
-        }
-    TPtrC8 lockPtr;
-    if (aDavFileInfo->LockToken())
-        {
-        lockPtr.Set(*aDavFileInfo->LockToken());
-        }
-    DEBUGSTRING16(("Add file info: name='%S'", &namePtr));
-    DEBUGSTRING8(("               lock='%S', time=%d",
-                  &lockPtr,
-                  aDavFileInfo->Timeout()));
-    
-#endif // DEBUG
-    iDavFileInfos.Append(aDavFileInfo);
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::RemoveDavFileInfoL
-// Remove a file info entry.
-// ----------------------------------------------------------------------------
-//
-void CRsfwDavAccess::RemoveDavFileInfoL(const TDesC& aPath)
-    {
-    TInt index = DavFileInfoIndexL(aPath);
-    if (index != KErrNotFound)
-        {
-        CRsfwDavFileInfo* davFileInfo =  iDavFileInfos[index];
-#ifdef _DEBUG
-        TPtrC namePtr;
-        if (davFileInfo->Name())
-            {
-            namePtr.Set(*davFileInfo->Name());
-            }
-        DEBUGSTRING16(("Remove file info: name='%S'", &namePtr));
-#endif // DEBUG
-        iDavFileInfos.Remove(index);
-        delete davFileInfo;
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::SetupL
-// Setup - should be immediately followed by NewL() call.
-// ----------------------------------------------------------------------------
-//
-void CRsfwDavAccess::SetupL(MRsfwRemoteAccessObserver* aRsfwRemoteAccessObserver)
-    {
-    DEBUGSTRING(("DAV: SetupL"));
-    MRsfwConnectionObserver* rsfwConnectionObserver = NULL;
-    if (aRsfwRemoteAccessObserver)
-        {
-        // Cascade remote access observers
-        iRsfwRemoteAccessObserver = aRsfwRemoteAccessObserver;
-        rsfwConnectionObserver = this;
-        }
-    iWebDavSession = CRsfwDavSession::NewL(this, rsfwConnectionObserver);
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::OpenL
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::OpenL(const TUriC& aUri,
-                        const TDesC& /*aFriendlyName*/,
-                        const TDesC& aUserName,
-                        const TDesC& aPassword,
-                        const TDesC& aAuxData,
-                        MRsfwRemoteAccessResponseHandler* aResponseHandler)
-    {
-    if (!aResponseHandler)
-        {
-        User::Leave(KErrArgument);
-        }
-
-    HBufC* url = HBufC::NewLC(KHttpsScheme().Length() +
-                              KMaxServerNameLen +
-                              1 +
-                              KMaxPath);
-    TPtr urlPtr = url->Des();
-
-    TInt portNumber = 0;
-    if (aUri.IsPresent(EUriPort))
-        {
-        TLex portx(aUri.Extract(EUriPort));
-        if (portx.Val(portNumber) != KErrNone)
-            {
-            portNumber = 0;
-            }
-        }
-
-    // Check scheme and map it to port number or vice versa
-    TPtrC scheme;
-    if (aUri.IsPresent(EUriScheme))
-        {
-        scheme.Set(aUri.Extract(EUriScheme));
-        }
-    if (scheme.Length())
-        {
-        if (portNumber == 0)
-            {
-            if (scheme.CompareF(KHttpsScheme) == 0)
-                {
-                portNumber = KHttpsPortNumber;
-                }
-            else
-                {
-                portNumber = KHttpPortNumber;
-                }
-            }
-        }
-    else
-        {
-        if (portNumber == 0)
-            {
-            portNumber = KHttpPortNumber;
-            }
-        if (portNumber == KHttpPortNumber)
-            {
-            scheme.Set(KHttpScheme);
-            }
-        else if (portNumber == KHttpsPortNumber)
-            {
-            scheme.Set(KHttpsScheme);
-            }
-        else
-            {
-            User::Leave(KErrBadName);
-            }
-        }
-        
-    TPtrC rootDirectory;
-    if (aUri.IsPresent(EUriPath))
-        {
-        rootDirectory.Set(aUri.Extract(EUriPath));
-        }
-    iRootDirectory.Copy(rootDirectory);
-    if (!iRootDirectory.Length() ||
-        iRootDirectory[iRootDirectory.Length() - 1] != '/')
-        {
-        // Append trailing '/'
-        iRootDirectory.Append('/');
-        }
-    
-    urlPtr.Copy(scheme);
-    urlPtr.Append(':');
-    urlPtr.Append('/');
-    urlPtr.Append('/');
-    urlPtr.Append(aUri.Extract(EUriHost));
-    // There needs to be a slash between server name and the root dir
-    // (we assume that there cannot be an excess of slash characters)
-    if (urlPtr[urlPtr.Length() - 1] != '/')
-        {
-        if (!iRootDirectory.Length() || (iRootDirectory[0] != '/'))
-            {
-            urlPtr.Append('/');
-            }
-        }
-    urlPtr.Append(iRootDirectory);
-    
-    DEBUGSTRING16(("DAV: OpenL to URL '%S'", &urlPtr));
-    
-    iWebDavSession->OpenL(urlPtr,
-                          portNumber,
-                          aUserName,
-                          aPassword,
-                          aAuxData);
-    CleanupStack::PopAndDestroy(url);
-    return OptionsL(aResponseHandler);
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::GetDirectoryL
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::GetDirectoryL(const TDesC& aPathName,
-                                RPointerArray<CRsfwDirEnt>& aDirEnts,
-                                MRsfwRemoteAccessResponseHandler* aResponseHandler)
-    {
-    // Get the contents of the directory
-    DEBUGSTRING16(("DAV: GetDirectory '%S'", &aPathName));
-
-    // check that arguments are sensible
-    // aPathName might here be null (mounted root directory)
-    if (aPathName.Length() > KMaxPath)
-        {
-        User::Leave(KErrBadName);
-        }
-
-    if (!aResponseHandler)
-        {
-        User::Leave(KErrArgument);
-        }
-
-    CRsfwDavAccessContextPropFindDir* davAccessContextPropFindDir =
-        CRsfwDavAccessContextPropFindDir::NewL(this,
-                                           aResponseHandler,
-                                           aPathName,
-                                           1,
-                                           NULL,
-                                           &aDirEnts);
-    TUint id = AddAccessContext(davAccessContextPropFindDir);
-    davAccessContextPropFindDir->StartL();
-    return id;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::GetFileL
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::GetFileL(const TDesC& aRemotePathName,
-                           const TDesC& aLocalPathName,
-                           TInt aOffset,
-                           TInt* aLength,
-                           TUint aFlags,
-                           MRsfwRemoteAccessResponseHandler* aResponseHandler)
-    {
-
-#ifdef _DEBUG
-    {
-    TInt length;
-    if (aLength)
-        {
-        length = *aLength;
-        }
-    else
-        {
-        length = 0;
-        }
-    DEBUGSTRING16(("DAV: GetFile rn='%S', ln='%S' (off=%d, len=%d)",
-                   &aRemotePathName,
-                   &aLocalPathName,
-                   aOffset,
-                   length));
-    }
-#endif // DEBUG
-
-    // check that arguments are sensible
-    if (aOffset < 0 ||
-       (aLength && *aLength < 0) ||
-       (!aResponseHandler))
-        {
-        User::Leave(KErrArgument);
-        }
-
-    if ((aLocalPathName.Length() == 0) ||
-        (aLocalPathName.Length() > KMaxPath) ||
-        (aRemotePathName.Length() == 0) ||
-        (aRemotePathName.Length() > KMaxPath))
-        {
-        User::Leave(KErrBadName);
-        }
-
-    CRsfwDavAccessContextGet* davAccessContextGet =
-        CRsfwDavAccessContextGet::NewL(this,
-                                   aResponseHandler,
-                                   aRemotePathName,
-                                   aLocalPathName,
-                                   aOffset,
-                                   aLength,
-                                   aFlags);
-    TUint id = AddAccessContext(davAccessContextGet);
-    davAccessContextGet->StartL();
-    return id;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::PutFileL
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::PutFileL(const TDesC& aLocalPathName,
-                           const TDesC& aRemotePathName,
-                           const TDesC8& aMimeType,
-                           TInt aOffset,
-                           TInt aLength,
-                           TInt aTotalLength,
-                           MRsfwRemoteAccessResponseHandler* aResponseHandler)
-    {
-    // Copy file to server using PUT,
-    // might require lock token, if the destination file is locked...
-#ifdef _DEBUG
-    {
-    TInt length;
-    if (aLength)
-        {
-        length = aLength;
-        }
-    else
-        {
-        length = 0;
-        }
-    DEBUGSTRING16(("DAV: PutFile ln='%S', rn='%S' (off=%d, len=%d)",
-                   &aLocalPathName,
-                   &aRemotePathName,
-                   aOffset,
-                   length));
-    }
-#endif // DEBUG
-
-    // check that arguments are sensible
-    if (aOffset < 0 ||
-       (aLength < 0) ||
-       (((aOffset + aLength) > aTotalLength) && aTotalLength > 0) ||
-       (!aResponseHandler))
-        {
-        User::Leave(KErrArgument);
-        }
-
-    // note that aLocalPathName can be undefined
-    // (CreateFile calls with null-ptr)
-    if ((aLocalPathName.Length() > KMaxPath) ||
-        (aRemotePathName.Length() == 0) ||
-        (aRemotePathName.Length() > KMaxPath) ||
-        (aMimeType.Length() > KMaxMimeTypeLength))
-        {
-        User::Leave(KErrBadName);
-        }
-
-
-    const HBufC8* lockToken = NULL;
-    CRsfwDavFileInfo *davFileInfo = DavFileInfoL(aRemotePathName);
-    if (davFileInfo)
-        {
-        lockToken = davFileInfo->LockToken();
-        }
-    CRsfwDavAccessContextPut* davAccessContextPut =
-        CRsfwDavAccessContextPut::NewL(this,
-                                   aResponseHandler,
-                                   aLocalPathName,
-                                   aRemotePathName,
-                                   aMimeType,
-                                   aOffset,
-                                   aLength,
-                                   aTotalLength,
-                                   lockToken);
-    TUint id = AddAccessContext(davAccessContextPut);
-    davAccessContextPut->StartL();
-    return id;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::PutFileL
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::PutFileL(const TDesC& aLocalPathName,
-                           const TDesC& aRemotePathName,
-                           const TDesC8& aMimeType,
-                           MRsfwRemoteAccessResponseHandler* aResponseHandler)
-    {
-    return PutFileL(aLocalPathName,
-                    aRemotePathName,
-                    aMimeType,
-                    0,
-                    NULL,
-                    0,
-                    aResponseHandler);
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::CreateFileL
-// overwriting info not needed in HTTP PUT
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::CreateFileL(const TDesC& aPathName,
-                              TBool /*aOverWriting*/,
-                              MRsfwRemoteAccessResponseHandler* aResponseHandler)
-    {
-    DEBUGSTRING16(("DAV: CreateFile '%S'", &aPathName));
-    // check that arguments are sensible
-    if (!aResponseHandler)
-        {
-        User::Leave(KErrArgument);
-        }
-
-    if ((aPathName.Length() == 0) ||
-       (aPathName.Length() >  KMaxPath))
-        {
-        User::Leave(KErrBadName);
-        }
-        
-    // Could create the file only from LOCK,
-    // but that seems to cause 500 Internal Error with several
-    // Apache servers...
-    TPtrC null;
-    return PutFileL(null, aPathName, KTextPlain, 0, NULL, 0, aResponseHandler);
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::MakeDirectoryL
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::MakeDirectoryL(
-    const TDesC& aPathName,
-    MRsfwRemoteAccessResponseHandler* aResponseHandler)
-    {
-    DEBUGSTRING16(("DAV: MakeDirectory", &aPathName));
-
-    // check that arguments are sensible
-    if (!aResponseHandler)
-        {
-        User::Leave(KErrArgument);
-        }
-
-    if ((aPathName.Length() == 0) ||
-       (aPathName.Length() >  KMaxPath))
-        {
-        User::Leave(KErrBadName);
-        }
-
-    CRsfwDavAccessContextMkDir* davAccessContextMkDir =
-        CRsfwDavAccessContextMkDir::NewL(this,
-                                     aResponseHandler,
-                                     aPathName);
-    TUint id = AddAccessContext(davAccessContextMkDir);
-    davAccessContextMkDir->StartL();
-    return id;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::DeleteDirectoryL
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::DeleteDirectoryL(
-    const TDesC& aPathName,
-    MRsfwRemoteAccessResponseHandler* aResponseHandler)
-    {
-    DEBUGSTRING16(("DAV: DeleteDirectory '%S'", &aPathName));
-
-    // check that arguments are sensible
-    if (!aResponseHandler)
-        {
-        User::Leave(KErrArgument);
-        }
-
-    if ((aPathName.Length() == 0) ||
-       (aPathName.Length() >  KMaxPath))
-        {
-        User::Leave(KErrBadName);
-        }
-
-    CRsfwDavAccessContextDelete* davAccessContextDelete =
-        CRsfwDavAccessContextDelete::NewL(this,
-                                      aResponseHandler,
-                                      aPathName,
-                                      ETrue,
-                                      NULL);
-    TUint id = AddAccessContext(davAccessContextDelete);
-    davAccessContextDelete->StartL();
-    return id;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::DeleteFileL
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::DeleteFileL(const TDesC& aPathName,
-                              MRsfwRemoteAccessResponseHandler* aResponseHandler)
-    {
-    DEBUGSTRING16(("DAV: DeleteFile '%S'", &aPathName));
-
-    // check that arguments are sensible
-    if (!aResponseHandler)
-        {
-        User::Leave(KErrArgument);
-        }
-
-    if ((aPathName.Length() == 0) ||
-       (aPathName.Length() >  KMaxPath))
-        {
-        User::Leave(KErrBadName);
-        }
-
-    const HBufC8* lockToken = NULL;
-    CRsfwDavFileInfo *davFileInfo = DavFileInfoL(aPathName);
-    if (davFileInfo)
-        {
-        lockToken = davFileInfo->LockToken();
-        }
-    CRsfwDavAccessContextDelete* davAccessContextDelete =
-        CRsfwDavAccessContextDelete::NewL(this,
-                                      aResponseHandler,
-                                      aPathName,
-                                      EFalse,
-                                      lockToken);
-    TUint id = AddAccessContext(davAccessContextDelete);
-    davAccessContextDelete->StartL();
-    return id;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::RenameL
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::RenameL(const TDesC& aSrcPathName,
-                          const TDesC& aDstPathName,
-                          TBool aOverwrite,
-                          MRsfwRemoteAccessResponseHandler* aResponseHandler)
-    {
-    DEBUGSTRING16(("DAV: Rename '%S' to '%S'", &aSrcPathName, &aDstPathName));
-
-     // check that arguments are sensible
-    if (!aResponseHandler)
-        {
-        User::Leave(KErrArgument);
-        }
-
-    if ((aSrcPathName.Length() == 0) ||
-        (aSrcPathName.Length() >  KMaxPath) ||
-        (aDstPathName.Length() == 0) ||
-        (aDstPathName.Length() >  KMaxPath))
-        {
-        User::Leave(KErrBadName);
-        }
-
-    // lock token for the source file, if the source is locked...
-    const HBufC8* lockToken = NULL;
-    CRsfwDavFileInfo* davFileInfo = DavFileInfoL(aSrcPathName);
-    if (davFileInfo)
-        {
-        lockToken = davFileInfo->LockToken();
-        }
-        
-    
-    // lock token for the destination file, if the destination is locked
-    const HBufC8* destLockToken = NULL;
-    CRsfwDavFileInfo* destDavFileInfo = DavFileInfoL(aDstPathName);
-    if (destDavFileInfo)
-        {
-        destLockToken = destDavFileInfo->LockToken();
-        }
-    
-        
-    CRsfwDavAccessContextMove* davAccessContextMove =
-        CRsfwDavAccessContextMove::NewL(this,
-                                    aResponseHandler,
-                                    aSrcPathName,
-                                    aDstPathName,
-                                    aOverwrite,
-                                    lockToken,
-                                    destLockToken);
-    TUint id = AddAccessContext(davAccessContextMove);
-    davAccessContextMove->StartL();
-    return id;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::GetDirectoryAttributesL
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::GetDirectoryAttributesL(
-    const TDesC& aPathName,
-    CRsfwDirEntAttr*& aAttr,
-    MRsfwRemoteAccessResponseHandler* aResponseHandler)
-    {
-    DEBUGSTRING16(("DAV: GetDirectoryAttributes of '%S'",
-                   &aPathName));
-
-    // check that arguments are sensible
-    // aPathName might here be null (mounted root directory)
-    if (!aResponseHandler)
-        {
-        User::Leave(KErrArgument);
-        }
-
-    if (aPathName.Length() > KMaxPath)
-        {
-        User::Leave(KErrBadName);
-        }
-
-    CRsfwDavAccessContextPropFindDir* davAccessContextPropFindDir =
-        CRsfwDavAccessContextPropFindDir::NewL(this,
-                                           aResponseHandler,
-                                           aPathName,
-                                           0,
-                                           &aAttr,
-                                           NULL);
-    TUint id = AddAccessContext(davAccessContextPropFindDir);
-    davAccessContextPropFindDir->StartL();
-    return id;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::GetFileAttributesL
-// ----------------------------------------------------------------------------
-//
-TUint
-CRsfwDavAccess::GetFileAttributesL(const TDesC& aPathName,
-                               CRsfwDirEntAttr*& aAttr,
-                               MRsfwRemoteAccessResponseHandler* aResponseHandler)
-    {
-    DEBUGSTRING16(("DAV: GetFileAttributes of '%S'",
-                   &aPathName));
-
-    // check that arguments are sensible
-    if (!aResponseHandler)
-        {
-        User::Leave(KErrArgument);
-        }
-
-    if ((aPathName.Length() == 0) ||
-       (aPathName.Length() >  KMaxPath))
-        {
-        User::Leave(KErrBadName);
-        }
-
-    CRsfwDavAccessContextPropFindFile* davAccessContextPropFindFile =
-        CRsfwDavAccessContextPropFindFile::NewL(this,
-                                            aResponseHandler,
-                                            aPathName,
-                                            &aAttr);
-    TUint id = AddAccessContext(davAccessContextPropFindFile);
-    davAccessContextPropFindFile->StartL();
-    return id;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::SetAttributesL
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::SetAttributesL(
-    const TDesC& /* aPathName */,
-    CRsfwDirEntAttr& /* aAttr */,
-    MRsfwRemoteAccessResponseHandler* /* aResponseHandler */)
-    {
-    DEBUGSTRING(("DAV: SetAttributes"));
-    User::Leave(KErrNotSupported);
-    // Not reached
-    return 0;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::ObtainLockL
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::ObtainLockL(const TDesC& aPathName,
-                              TUint aLockFlags,
-                              TUint& aTimeout,
-                              TDesC8*& aLockToken,
-                              MRsfwRemoteAccessResponseHandler* aResponseHandler)
-    {
-    // check that arguments are sensible
-    if ((!aResponseHandler) ||
-        (aTimeout == 0))
-        {
-        User::Leave(KErrArgument);
-        }
-
-    // CRsfwDavAccess is the place to know about webdab locks
-    // We only try to obtain a lock if the file was opened for writing
-    if ((!(aLockFlags & EFileWrite)) ||
-        (iWebDavSession->WebDavSupportClass() < KDavVersionTwo))
-        {
-        // WebDAV doesn't have read locks
-        aResponseHandler->HandleRemoteAccessResponse(0, KErrNotSupported); 
-        return 0;
-        }
-    
-    if ((aPathName.Length() == 0) ||
-       (aPathName.Length() >  KMaxPath))
-        {
-        User::Leave(KErrBadName);
-        }
-
-    CRsfwDavAccessContextLock* davAccessContextLock =
-        CRsfwDavAccessContextLock::NewL(this,
-                                    aResponseHandler,
-                                    aPathName,
-                                    aLockFlags,
-                                    aTimeout,
-                                    &aLockToken);
-    TUint id = AddAccessContext(davAccessContextLock);
-    davAccessContextLock->StartL();
-    return id;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::ReleaseLockL
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::ReleaseLockL(const TDesC& aPathName,
-                               MRsfwRemoteAccessResponseHandler* aResponseHandler)
-    {
-    /*
-      Precondition:
-      - File has been at least locked so there must be fileInfo and
-      locktoken for it
-    */
-    // check that arguments are sensible
-    if (!aResponseHandler)
-        {
-        User::Leave(KErrArgument);
-        }
-
-    if ((aPathName.Length() == 0) ||
-       (aPathName.Length() >  KMaxPath))
-        {
-        User::Leave(KErrBadName);
-        }
-           
-    // Must send the Lock Token
-    CRsfwDavFileInfo* davFileInfo = DavFileInfoL(aPathName);
-    if (!davFileInfo)
-        {
-        User::Leave(KErrNotFound);
-        }
-
-    const HBufC8* lockToken = davFileInfo->LockToken();
-    if (!lockToken)
-        {
-        User::Leave(KErrNotFound);
-        }
-    // Prevent further access to lock token
-    davFileInfo->SetFlag(TRsfwDavFileInfoFlags::EUnlockPending);
-
-    CRsfwDavAccessContextUnlock* davAccessContextUnlock =
-        CRsfwDavAccessContextUnlock::NewL(this,
-                                      aResponseHandler,
-                                      aPathName,
-                                      lockToken);
-    TUint id = AddAccessContext(davAccessContextUnlock);
-    davAccessContextUnlock->StartL();
-    return id;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::RefreshLockL
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::RefreshLockL(const TDesC& aPathName,
-                               TUint& aTimeout,
-                               MRsfwRemoteAccessResponseHandler* aResponseHandler)
-
-    {
-    /*
-      Precondition:
-      - File has been at least locked
-      so there must be fileInfo and locktoken for it
-    */
-    // check that arguments are sensible
-    if ((!aResponseHandler) ||
-        (aTimeout == 0))
-        {
-        User::Leave(KErrArgument);
-        }
-
-    if ((aPathName.Length() == 0) ||
-       (aPathName.Length() >  KMaxPath))
-        {
-        User::Leave(KErrBadName);
-        }
-
-
-    // Must send the Lock Token
-    CRsfwDavFileInfo* davFileInfo = DavFileInfoL(aPathName);
-    if (!davFileInfo)
-        {
-        User::Leave(KErrNotFound);
-        }
-    const HBufC8* lockToken = davFileInfo->LockToken();
-    if (!lockToken)
-        {
-        User::Leave(KErrNotFound);
-        }
-
-    CRsfwDavAccessContextRefreshLock* davAccessContextRefreshLock =
-        CRsfwDavAccessContextRefreshLock::NewL(this,
-                                           aResponseHandler,
-                                           aPathName,
-                                           lockToken,
-                                           aTimeout);
-    TUint id = AddAccessContext(davAccessContextRefreshLock);
-    davAccessContextRefreshLock->StartL();
-    return id;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::CancelL by ID
-// ----------------------------------------------------------------------------
-//
-void CRsfwDavAccess::Cancel(TUint aId)
-    {
-    TInt i;
-    if (aId)
-        {
-        i = LookupAccessContextByContextId(aId);
-        if (i != KErrNotFound)
-            {
-            CRsfwDavAccessContext* context = iDavAccessContexts[i];
-            // sometimes it may happen that transaction has not been created for 
-            // some context (e.g. if a leave has occured)
-            if (context->WebDavTransaction())
-                {
-                context->WebDavTransaction()->Cancel();
-                }
-            else
-                {
-                iDavAccessContexts.Remove(i);
-                delete context;                
-                }                        
-            }
-        }
-    else
-        {
-        // Cancel all pending transactions.
-        // Note that cancelling one transaction may result in creating the other
-        // e.g. if you cancel PUT, then RELEASE LOCK is generated.
-        // Anyway the purpose here is to 'kill' all of them, even those generated later
-        DEBUGSTRING(("Cancelling all pending transactions..."));
-        while (iDavAccessContexts.Count() > 0)
-            {
-            CRsfwDavAccessContext* context = iDavAccessContexts[0];
-            TUint id = context->Id();
-            Cancel(id);    
-            }
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::CancelL by path
-// ----------------------------------------------------------------------------
-//
-void CRsfwDavAccess::Cancel(TDesC& aTargetPath)
-    {
-    DEBUGSTRING16(("CRsfwDavAccess::Cancel '%S'", &aTargetPath));
-    TInt i;
-    i = LookupAccessContextByPath(aTargetPath);
-    if (i != KErrNotFound)
-        {
-        DEBUGSTRING16(("found transaction....cancelling webdavop %d", 
-                    iDavAccessContexts[i]->WebDavTransaction()->iWebDavOp));
-        iDavAccessContexts[i]->WebDavTransaction()->Cancel();
-        }
-    }
-
-
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::SetLockToken
-// ----------------------------------------------------------------------------
-//
-TInt CRsfwDavAccess::SetLockToken(const TDesC& aPathName,
-                              const TDesC8& aLockToken)
-    {
-    TRAPD(err, SetLockTokenL(aPathName, aLockToken));
-    return err;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::SetLockTokenL
-// ----------------------------------------------------------------------------
-//
-void CRsfwDavAccess::SetLockTokenL(const TDesC& aPathName,
-                               const TDesC8& aLockToken)
-    {
-    HBufC* path = HBufC::NewLC(iRootDirectory.Length() + KMaxPath + 1);
-    TPtr pathPtr = path->Des();
-    pathPtr.Copy(iRootDirectory);
-    pathPtr.Append(aPathName);
-
-    DEBUGSTRING16(("DAV: setting lock token: path = '%S'", &pathPtr));
-    DEBUGSTRING8(("                        token = '%S'", &aLockToken));
-    
-    if (aLockToken.Length())
-        {
-        CRsfwDavFileInfo* fileInfo = DavFileInfoL(pathPtr);
-        if (fileInfo)
-            {
-            fileInfo->SetLockTokenL(aLockToken);
-            }
-        else 
-            {
-            // new file
-            fileInfo = CRsfwDavFileInfo::NewL();
-            CleanupStack::PushL(fileInfo);
-            fileInfo->SetNameL(pathPtr);
-            fileInfo->SetLockTokenL(aLockToken);
-            CleanupStack::Pop(fileInfo);
-            // Ownership transferred to file info array
-            AddDavFileInfo(fileInfo);
-            }
-        }
-    else
-        {
-        // Remove lock token
-        RemoveDavFileInfoL(pathPtr);
-        }
-
-    CleanupStack::PopAndDestroy(path);
-    }
-
-// ----------------------------------------------------------------------------
-// From MRsfwDavResponseObserver
-// ----------------------------------------------------------------------------
-
-void CRsfwDavAccess::RequestCompleteL(TUint aWebDavTransactionId)
-    {
-    TInt i = LookupAccessContextByTransactionId(aWebDavTransactionId);
-    if (i != KErrNotFound)
-        {
-        CRsfwDavAccessContext* context = iDavAccessContexts[i];
-        DEBUGSTRING(("DAV: Request %d complete", aWebDavTransactionId));
-        context->TransactionCompleteL();
-        if (context->Done())
-            {
-            MRsfwRemoteAccessResponseHandler* responseHandler =
-                context->ResponseHandler();
-            TUint id = context->Id();
-            TInt status = context->Status();
-            iDavAccessContexts.Remove(i);
-            delete context;
-            responseHandler->HandleRemoteAccessResponse(id, status);
-            }
-        }
-    else
-        {
-        DEBUGSTRING(("DAV: Stray request (id=%d) complete",
-                     aWebDavTransactionId));
-        }
-    }
-
-void CRsfwDavAccess::RequestError(TUint aWebDavTransactionId, TInt aStatus)
-    {
-    TInt i = LookupAccessContextByTransactionId(aWebDavTransactionId);
-    if (i != KErrNotFound)
-        {
-        CRsfwDavAccessContext* context = iDavAccessContexts[i];
-        DEBUGSTRING(("DAV: Request %d error %d",
-                     aWebDavTransactionId,
-                     aStatus));
-        context->TransactionError(aStatus);
-        if (context->Done())
-            {
-            MRsfwRemoteAccessResponseHandler* responseHandler =
-                context->ResponseHandler();
-            TUint id = context->Id();
-            TInt status = context->Status();
-            iDavAccessContexts.Remove(i);
-            delete context;
-            responseHandler->HandleRemoteAccessResponse(id, status);
-            }
-        }
-    else
-        {
-        DEBUGSTRING(("DAV: Stray request (id=%d) error",
-                     aWebDavTransactionId));
-        }
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::AddAccessContext
-// Add a context entry in the table of currently active contexts.
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::AddAccessContext(CRsfwDavAccessContext* aDavAccessContext)
-    {
-    TUint id = GetNextAccessContextId();
-    DEBUGSTRING(("DAV: Added transaction %d", id));
-    aDavAccessContext->SetId(id);
-    iDavAccessContexts.Append(aDavAccessContext);
-    return id;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::LookupAccessContextByTransactionId
-// Find an access context for the given WebDAV transaction id.
-// ----------------------------------------------------------------------------
-//
-TInt CRsfwDavAccess::LookupAccessContextByTransactionId(TUint aWebDavTransactionId)
-    {
-    TInt i;
-    for (i = 0; i < iDavAccessContexts.Count(); i++)
-        {
-        if (iDavAccessContexts[i]->WebDavTransactionId() ==
-            aWebDavTransactionId)
-            {
-            return i;
-            }
-        }
-    DEBUGSTRING(("Access context for id %d is missing !!!",
-                 aWebDavTransactionId));
-    return KErrNotFound;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::LookupAccessContext
-// Find an access context having the given id.
-// ----------------------------------------------------------------------------
-//
-TInt CRsfwDavAccess::LookupAccessContextByContextId(TUint aId)
-    {
-    TInt i;
-    for (i = 0; i < iDavAccessContexts.Count(); i++)
-        {
-        if (iDavAccessContexts[i]->Id() == aId)
-            {
-            return i;
-            }
-        }
-    DEBUGSTRING(("Access context for id %d is missing !!!", aId));
-    return KErrNotFound;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::LookupAccessContextByPath
-// Find an access context based on the path of the targer file/directory.
-// ----------------------------------------------------------------------------
-//
-TInt CRsfwDavAccess::LookupAccessContextByPath(TDesC& aTargetPath)
-    { 
-    TInt i;
-    for (i = 0; i < iDavAccessContexts.Count(); i++)
-        {
-        if (iDavAccessContexts[i]->TargetPath() == aTargetPath)
-            {
-            return i;
-            }
-        }
-    return KErrNotFound;
-    }
-
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::DavFileInfoIndexL
-// Find the index to file info array for the given file name.
-// ----------------------------------------------------------------------------
-//
-TInt CRsfwDavAccess::DavFileInfoIndexL(const TDesC& aName)
-    {
-    HBufC* path = HBufC::NewLC(iRootDirectory.Length() + KMaxPath + 1);
-    TPtr pathPtr = path->Des();
-    pathPtr.Copy(iRootDirectory);
-    pathPtr.Append(aName);
-
-    DEBUGSTRING16(("Finding file info for '%S'", &pathPtr));
-    TInt index;
-    for (index = 0; index < iDavFileInfos.Count(); index++)
-        {
-        const HBufC* name = iDavFileInfos[index]->Name();
-        if (name)
-            {
-            if (pathPtr.Compare(*name) == 0)
-                {
-                DEBUGSTRING(("info found"));
-                CleanupStack::PopAndDestroy(path);
-                return index;
-                }
-            }
-        }
-    CleanupStack::PopAndDestroy(path);
-    return KErrNotFound;
-    }
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::OptionsL
-// Perform an Options query
-// ----------------------------------------------------------------------------
-//
-TUint CRsfwDavAccess::OptionsL(MRsfwRemoteAccessResponseHandler* aResponseHandler)
-    {
-    CRsfwDavAccessContextOptions* davAccessContextOptions =
-        CRsfwDavAccessContextOptions::NewL(this, aResponseHandler);
-    TUint id = AddAccessContext(davAccessContextOptions);
-    davAccessContextOptions->StartL();
-    return id;
-    }
-
-// ----------------------------------------------------------------------------
-// From MRsfwConnectionObserver
-// ----------------------------------------------------------------------------
-
-// ----------------------------------------------------------------------------
-// CRsfwDavAccess::HandleConnectionEventL
-// Perform an Options query
-// ----------------------------------------------------------------------------
-//
-void CRsfwDavAccess::HandleConnectionEventL(TInt aConnectionEvent,
-                                        TAny* /*aArg*/)
-
-    {
-    switch (aConnectionEvent)
-        {
-    case ERsfwConnectionObserverEventConnectionDisconnected:
-        if (iRsfwRemoteAccessObserver)
-            {
-            iRsfwRemoteAccessObserver->
-                HandleRemoteAccessEventL(
-                    ERsfwRemoteAccessObserverEventConnection,
-                    ERsfwRemoteAccessObserverEventConnectionDisconnected,
-                    NULL);
-            }
-        break;
-        
-    case ERsfwConnectionObserverEventConnectionWeaklyConnected:
-        // If we were reacting to link up events, we would do OptionsL(this);
-        break;
-        
-    case ERsfwConnectionObserverEventConnectionStronglyConnected:
-        // If we were reacting to link up events, we would do OptionsL(this);
-        break;
-        
-    default:
-        break;
-        }
-    }
-
-//  End of File