xdmprotocols/XcapProtocol/XcapCache/Client/src/XcapCache.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:05:17 +0200
changeset 0 c8caa15ef882
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* 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:   RXcapCache
*
*/



#include "XcapCache.h"
#include "CommonDefines.h"


//CLASS DECLARATION
EXPORT_C RXcapCache::RXcapCache() : iConnected( EFalse )
    {
    }

// ----------------------------------------------------
// RXcapCache::Store
// 
// ----------------------------------------------------
//
EXPORT_C void RXcapCache::Store( const TDesC8& aETag, 
                                 const TDesC& aDocumentName,
                                 const TDesC8& aRootLocation,
                                 const TDesC8& aResponseData )
    {
    SendReceive( EXcapCacheStore, TIpcArgs( &aDocumentName, &aRootLocation, &aETag, &aResponseData ) );
    }

// ----------------------------------------------------
// RXcapCache::Delete
// 
// ----------------------------------------------------
//
EXPORT_C TInt RXcapCache::Delete( const TDesC& aDocumentName,
                                  const TDesC8& aRootLocation )
    {
    TCacheEntryInfo entryInfo;
    entryInfo.iRootUri = CONST_CAST( TDesC8*, &aRootLocation );
    entryInfo.iDocumentUri = CONST_CAST( TDesC*, &aDocumentName );
    TPckgC<TCacheEntryInfo> package( entryInfo );
    return SendReceive( EXcapCacheDelete, TIpcArgs( &package ) );
    }
                                  
// ----------------------------------------------------
// RXcapCache::FetchDocumentInfo
// 
// ----------------------------------------------------
//
EXPORT_C TInt RXcapCache::FetchDocumentInfo( TDes8& aETagDescriptor,
                                             const TDesC& aDocumentName,
                                             const TDesC8& aRootLocation,
                                             TCacheEntryInfo& aEntryInfo )
    {
    TPckg<TCacheEntryInfo> package( aEntryInfo );
    return SendReceive( EXcapCacheFetchInfo, TIpcArgs( &package, &aETagDescriptor,
                                                       &aDocumentName, &aRootLocation ) );
    }

// ----------------------------------------------------
// RXcapCache::FetchDocumentContent
// 
// ----------------------------------------------------
//
EXPORT_C void RXcapCache::FetchDocumentContent( TDes8& aContentDescriptor,
                                                const TDesC& aDocumentName,
                                                const TDesC8& aRootLocation )
    {
    SendReceive( EXcapCacheFetchData, TIpcArgs(
                 &aDocumentName, &aRootLocation, &aContentDescriptor ) );
    }

// ----------------------------------------------------
// RXcapCache::IsCurrent
// 
// ----------------------------------------------------
//
EXPORT_C TInt RXcapCache::IsCurrent( const TDesC8& aETag, 
                                     const TDesC& aDocumentName,
                                     const TDesC8& aRootLocation )
    {
    return SendReceive( EXcapCacheCheckValidity, TIpcArgs(
                        &aETag, &aDocumentName, &aRootLocation ) );
    }
                                 
// ----------------------------------------------------
// RXcapCache::Flush
// 
// ----------------------------------------------------
//
EXPORT_C void RXcapCache::Flush()
    {
    SendReceive( EXcapCacheFlush );
    }
        
// ----------------------------------------------------
// RXcapCache::Version
// 
// ----------------------------------------------------
//
EXPORT_C TVersion RXcapCache::Version() const
	{
	return TVersion( KCacheServerMajorVersionNumber,
					 KCacheServerMinorVersionNumber,
					 KCacheServerBuildVersionNumber );
	}

// ----------------------------------------------------
// RXcapCache::~RXcapCache
// 
// ----------------------------------------------------
//
EXPORT_C RXcapCache::~RXcapCache()
    {
    }

// ----------------------------------------------------
// RXcapCache::Connect()
// 
// ----------------------------------------------------
//
EXPORT_C TInt RXcapCache::Connect()
    {
    TInt ret = KErrNone;
    if( !iConnected )
        {
        ret = StartServer();
        if( ret == KErrNone || ret == KErrAlreadyExists )
            {
            ret = CreateSession( KXcapCacheServerLib, Version(), KTTDefaultMessageSlots );
            iConnected = ( ret == KErrNone );
            }
        }
    return ret; 
    }

// ----------------------------------------------------
// RXcapCache::StartServer
//
// ----------------------------------------------------
//
TInt RXcapCache::StartServer()
    {
    TInt ret = KErrNone;
    TRequestStatus status = KRequestPending; 
    if ( !IsRunning() )
        {
        RProcess server;
        ret = server.Create( KXcapCacheServerExe, KNullDesC );       
        if( ret != KErrNone )
            return ret;     
        server.Rendezvous( status );    	
        status != KRequestPending ? server.Kill( 0 ) : server.Resume();
        //Wait for start or death 
        User::WaitForRequest( status );	
        ret = server.ExitType() == EExitPanic ? KErrGeneral : status.Int();
        server.Close();	
        }
    return ret;
    }

// ----------------------------------------------------
// RXcapCache::IsRunning
//
// ----------------------------------------------------
//
TBool RXcapCache::IsRunning()
    {
    TFindServer findServer( KXcapCacheServerName );
    TFullName name;
    return ( findServer.Next( name ) == KErrNone );
    } 
  
// End of File