diff -r 2669f8761a99 -r fbd2e7cec7ef xdmprotocols/LocalProtocol/src/LocalProtocol.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xdmprotocols/LocalProtocol/src/LocalProtocol.cpp Wed Sep 01 12:23:14 2010 +0100 @@ -0,0 +1,287 @@ +/* +* Copyright (c) 2005 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: CLocalProtocol +* +*/ + + + +#include +#include +#include +#include +#include "XdmXmlParser.h" +#include "LocalProtocol.h" +#include "LocalDocument.h" +#include "LocalDocumentNode.h" +#include "LocalDirectory.h" +#include "XdmCredentials.h" +#include "XdmProtocolInfo.h" +#include "XdmOperationFactory.h" + +// ---------------------------------------------------------- +// CLocalProtocol::CLocalProtocol +// +// ---------------------------------------------------------- +// +CLocalProtocol::CLocalProtocol( const CXdmEngine& aXdmEngine, + const CXdmProtocolInfo& aProtocolInfo ) : + iTransferMediaOpen( EFalse ), + iXdmEngine( CONST_CAST( CXdmEngine&, aXdmEngine ) ), + iProtocolInfo( aProtocolInfo ) + { + } + +// ---------------------------------------------------------- +// CLocalProtocol::DeleteLogFileL +// +// ---------------------------------------------------------- +// +CLocalProtocol* CLocalProtocol::NewL( const TXdmProtocolParams& aProtocolParams ) + { + CLocalProtocol* self = new ( ELeave ) CLocalProtocol( aProtocolParams.iXdmEngine, + aProtocolParams.iProtocolInfo ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------- +// CLocalProtocol::DeleteLogFileL +// +// ---------------------------------------------------------- +// +CLocalProtocol::~CLocalProtocol() + { + #ifdef _DEBUG + WriteToLog( _L8( "CLocalProtocol::~CLocalProtocol()" ) ); + #endif + delete iRootFolder; + delete iXmlParser; + delete iLogWriter; + iFileSession.Close(); + Dll::FreeTls(); + } + +// ---------------------------------------------------------- +// CLocalProtocol::ConstructL +// +// ---------------------------------------------------------- +// +void CLocalProtocol::ConstructL() + { + #ifdef _DEBUG + iLogWriter = CXdmLogWriter::NewL( KLocalEngLogFile ); + WriteToLog( _L8( "CLocalProtocol::ConstructL() " ) ); + #endif + iXmlParser = CXdmXmlParser::NewL(); + SetRootDirectoryL( iProtocolInfo.Root() ); + User::LeaveIfError( iFileSession.Connect() ); + Dll::SetTls( this ); + } + +// ---------------------------------------------------------- +// CLocalProtocol::SetRootDirectoryL +// +// ---------------------------------------------------------- +// +void CLocalProtocol::SetRootDirectoryL( const TDesC& aRootPath ) + { + TUid id = RProcess().Identity(); + TBuf<32> processId; + processId.Zero(); + processId.Format( _L( "%x" ), id ); + #ifdef _DEBUG + WriteToLog( _L8( "CLocalProtocol::SetRootDirectoryL()" ) ); + #endif + if( aRootPath.Length() > 0 ) + { + iRootFolder = HBufC::NewL( aRootPath.Length() + + processId.Length() + + TPtrC( KLocalEngPrivateRoot ).Length() + 4 ); + iRootFolder->Des().Copy( KLocalEngPrivateRoot ); + iRootFolder->Des().Append( processId ); + iRootFolder->Des().Append( _L( "\\" ) ); + iRootFolder->Des().Append( aRootPath ); + iRootFolder->Des().Append( _L( "\\" ) ); + } + else + { + iRootFolder = HBufC::NewL( processId.Length() + + KLocalEngPrivateRoot().Length() + 2 ); + iRootFolder->Des().Copy( KLocalEngPrivateRoot ); + iRootFolder->Des().Append( processId ); + iRootFolder->Des().Append( _L( "\\" ) ); + } + #ifdef _DEBUG + TBuf8<256> eight; + eight.Copy( iRootFolder->Des() ); + WriteToLog( _L8( " Path: %S" ), &eight ); + #endif + } + +// ---------------------------------------------------------- +// CLocalProtocol::.WriteToLog +// +// ---------------------------------------------------------- +// +void CLocalProtocol::WriteToLog( TRefByValue aFmt,... ) const + { + VA_LIST list; + VA_START( list, aFmt ); + TBuf8 buf; + buf.FormatList( aFmt, list ); + iLogWriter->WriteToLog( buf ); + } + +// ---------------------------------------------------- +// CLocalProtocol::InitTransferMedia +// +// ---------------------------------------------------- +// +void CLocalProtocol::InitTransferMedium( TInt /*aIdleTimeout*/, + TRequestStatus& aStatus ) + { + TRequestStatus* status = &aStatus; + User::RequestComplete( status, KErrNone ); + } + +// ---------------------------------------------------- +// CLocalProtocol::CancelTransferMediaInit +// +// ---------------------------------------------------- +// +void CLocalProtocol::CancelTransferMediumInit() + { + } + +// ---------------------------------------------------- +// CLocalProtocol::IsTransferAvailable +// +// ---------------------------------------------------- +// +TBool CLocalProtocol::IsTransferAvailable() const + { + return ETrue; + } + +// ---------------------------------------------------- +// CLocalProtocol::RFSession +// +// ---------------------------------------------------- +// +RFs& CLocalProtocol::RFSession() + { + return iFileSession; + } + +// ---------------------------------------------------- +// CLocalProtocol::Root +// +// ---------------------------------------------------- +// +TPtrC CLocalProtocol::Root() + { + return iRootFolder != NULL ? iRootFolder->Des() : TPtrC(); + } + +// ---------------------------------------------------------- +// void CXcapProtocol::DeleteLogFileL +// +// ---------------------------------------------------------- +// +EXPORT_C RFs& CLocalProtocol::FileSession() + { + TAny* ptr = Dll::Tls(); + CLocalProtocol* self = ( CLocalProtocol* )ptr; + return self->RFSession(); + } + +// ---------------------------------------------------- +// CLocalProtocol::RootFolder +// +// ---------------------------------------------------- +// +EXPORT_C TPtrC CLocalProtocol::RootFolder() + { + TAny* ptr = Dll::Tls(); + CLocalProtocol* self = ( CLocalProtocol* )ptr; + return self->Root(); + } + +// ---------------------------------------------------- +// CLocalProtocol::CreateDocumentNodeL +// +// ---------------------------------------------------- +// +CXdmDocumentNode* CLocalProtocol::CreateDocumentNodeL() + { + return CLocalDocumentNode::NewL( iXdmEngine, *this ); + } + +// ---------------------------------------------------- +// CLocalProtocol::CreateDocumentL +// +// ---------------------------------------------------- +// +CXdmDocument* CLocalProtocol::CreateDocumentL( const TDesC& aDocumentName, + const TXdmDocType /*aDocumentType*/ ) + { + return CLocalDocument::NewL( iXdmEngine, aDocumentName, *this ); + } + +// ---------------------------------------------------- +// CLocalProtocol::CreateDirectoryL +// +// ---------------------------------------------------- +// +CXdmDirectory* CLocalProtocol::CreateDirectoryL( const TDesC& aDirectoryPath ) + { + TPtrC root = iRootFolder->Des(); + HBufC* fullName = HBufC::NewLC( root.Length() + aDirectoryPath.Length() ); + fullName->Des().Copy( root ); + fullName->Des().Append( aDirectoryPath ); + CXdmDirectory* dir = CLocalDirectory::NewL( fullName->Des(), iXdmEngine, *this ); + CleanupStack::PopAndDestroy(); //fullName + return dir; + } + +// --------------------------------------------------------- +// Map the interface UIDs to implementation factory functions +// +// --------------------------------------------------------- +// +const TImplementationProxy ImplementationTable[] = + { + #ifdef __EABI__ + IMPLEMENTATION_PROXY_ENTRY( 0x10207424, CLocalProtocol::NewL ) + #else + { { 0x10207424 }, CLocalProtocol::NewL } + #endif + }; + +// --------------------------------------------------------- +// Return the implementation table & number of implementations +// +// --------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) + { + aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); + return ImplementationTable; + } + + +// End of File