diff -r 94dbab0a2133 -r bc06d8566074 mmlibs/mmfw/src/Client/Video/mediaclientpolicyserversession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmlibs/mmfw/src/Client/Video/mediaclientpolicyserversession.cpp Mon Mar 15 12:46:07 2010 +0200 @@ -0,0 +1,119 @@ +// Copyright (c) 2010 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: +// + +#include "mediaclientpolicyserversession.h" +#include +#include "mediaclientvideotrace.h" + +// Policy Server EXE name +_LIT( KIvePolicyServerImg, "ivepolicyserver" ); + +// Policy Server thread name +_LIT( KIvePolicyServerName, "!ivepolicyserver0x10204C27" ); + +// Number of asynchronous message slots +const TInt KIveAsyncMessageSlots = 1; + +static TInt StartServer() + { + DEBUG_PRINTF("medialclientsession StartServer +++"); + + RProcess server; + TInt error = server.Create(KIvePolicyServerImg, KNullDesC); + if (error != KErrNone) + { + DEBUG_PRINTF2("medialclientsession StartServer server creation failed %d", error); + return error; + } + + TRequestStatus status; + + server.Rendezvous(status); + if (status != KRequestPending) + { + server.Kill( 0 ); + // abort startup + } + else + { + server.Resume(); + // logon OK - start the server + } + + User::WaitForRequest(status); + // wait for start or death + error = (server.ExitType() == EExitPanic) ? KErrGeneral : status.Int(); + server.Close(); + + DEBUG_PRINTF(" medialclientsession StartServer ---"); + return error; + } + +RMediaClientPolicyServerSession::RMediaClientPolicyServerSession(): + RSessionBase() + { + DEBUG_PRINTF(" RMediaClientPolicyServerSession::RMediaClientPolicyServerSession +++"); + DEBUG_PRINTF(" RMediaClientPolicyServerSession::RMediaClientPolicyServerSession ---"); + } + +TInt RMediaClientPolicyServerSession::Connect() + { + DEBUG_PRINTF(" RMediaClientPolicyServerSession::Connect +++"); + + TInt error = KErrNone; + for (TInt i = 0; i < 2; i++) + { + // Try to create session. + error = CreateSession(KIvePolicyServerName, TVersion( 0, 0, 0 ), KIveAsyncMessageSlots); + + if (error != KErrNotFound && error != KErrServerTerminated) + { + DEBUG_PRINTF("RMediaClientPolicyServerSession::Connect Server found and session created."); + DEBUG_PRINTF2("RMediaClientPolicyServerSession::Connect --- returns %d", error); + return error; + } + + // If session failed, try to start server once. + if (i == 0) + { + DEBUG_PRINTF("RMediaClientPolicyServerSession::Connect StartServer"); + // Start server + error = StartServer(); + if (error != KErrNone && error != KErrAlreadyExists) + { + DEBUG_PRINTF("RMediaClientPolicyServerSession::Connect Server startup failed."); + DEBUG_PRINTF2("RMediaClientPolicyServerSession::Connect --- returns %d", error); + return error; + } + } + else + { + DEBUG_PRINTF2("RMediaClientPolicyServerSession::Connect Session creation failed error %d", error); + } + } + + DEBUG_PRINTF2("RMediaClientPolicyServerSession::Connect --- returns %d", error); + return error; + } + +TInt RMediaClientPolicyServerSession::SendMessage( TInt aFunction, const TIpcArgs &aArgs ) const + { + DEBUG_PRINTF("RMediaClientPolicyServerSession::SendMessage +++"); + + TInt error = SendReceive( aFunction, aArgs ); + + DEBUG_PRINTF2("RMediaClientPolicyServerSession::SendMessage --- returns %d", error); + return error; + }