sl@0: // Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include "mediaclientpolicyserversession.h" sl@0: #include sl@0: #include "mediaclientvideotrace.h" sl@0: sl@0: // Policy Server EXE name sl@0: _LIT( KIvePolicyServerImg, "ivepolicyserver" ); sl@0: sl@0: // Policy Server thread name sl@0: _LIT( KIvePolicyServerName, "!ivepolicyserver0x10204C27" ); sl@0: sl@0: // Number of asynchronous message slots sl@0: const TInt KIveAsyncMessageSlots = 1; sl@0: sl@0: static TInt StartServer() sl@0: { sl@0: DEBUG_PRINTF("medialclientsession StartServer +++"); sl@0: sl@0: RProcess server; sl@0: TInt error = server.Create(KIvePolicyServerImg, KNullDesC); sl@0: if (error != KErrNone) sl@0: { sl@0: DEBUG_PRINTF2("medialclientsession StartServer server creation failed %d", error); sl@0: return error; sl@0: } sl@0: sl@0: TRequestStatus status; sl@0: sl@0: server.Rendezvous(status); sl@0: if (status != KRequestPending) sl@0: { sl@0: server.Kill( 0 ); sl@0: // abort startup sl@0: } sl@0: else sl@0: { sl@0: server.Resume(); sl@0: // logon OK - start the server sl@0: } sl@0: sl@0: User::WaitForRequest(status); sl@0: // wait for start or death sl@0: error = (server.ExitType() == EExitPanic) ? KErrGeneral : status.Int(); sl@0: server.Close(); sl@0: sl@0: DEBUG_PRINTF(" medialclientsession StartServer ---"); sl@0: return error; sl@0: } sl@0: sl@0: RMediaClientPolicyServerSession::RMediaClientPolicyServerSession(): sl@0: RSessionBase() sl@0: { sl@0: DEBUG_PRINTF(" RMediaClientPolicyServerSession::RMediaClientPolicyServerSession +++"); sl@0: DEBUG_PRINTF(" RMediaClientPolicyServerSession::RMediaClientPolicyServerSession ---"); sl@0: } sl@0: sl@0: TInt RMediaClientPolicyServerSession::Connect() sl@0: { sl@0: DEBUG_PRINTF(" RMediaClientPolicyServerSession::Connect +++"); sl@0: sl@0: TInt error = KErrNone; sl@0: for (TInt i = 0; i < 2; i++) sl@0: { sl@0: // Try to create session. sl@0: error = CreateSession(KIvePolicyServerName, TVersion( 0, 0, 0 ), KIveAsyncMessageSlots); sl@0: sl@0: if (error != KErrNotFound && error != KErrServerTerminated) sl@0: { sl@0: DEBUG_PRINTF("RMediaClientPolicyServerSession::Connect Server found and session created."); sl@0: DEBUG_PRINTF2("RMediaClientPolicyServerSession::Connect --- returns %d", error); sl@0: return error; sl@0: } sl@0: sl@0: // If session failed, try to start server once. sl@0: if (i == 0) sl@0: { sl@0: DEBUG_PRINTF("RMediaClientPolicyServerSession::Connect StartServer"); sl@0: // Start server sl@0: error = StartServer(); sl@0: if (error != KErrNone && error != KErrAlreadyExists) sl@0: { sl@0: DEBUG_PRINTF("RMediaClientPolicyServerSession::Connect Server startup failed."); sl@0: DEBUG_PRINTF2("RMediaClientPolicyServerSession::Connect --- returns %d", error); sl@0: return error; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: DEBUG_PRINTF2("RMediaClientPolicyServerSession::Connect Session creation failed error %d", error); sl@0: } sl@0: } sl@0: sl@0: DEBUG_PRINTF2("RMediaClientPolicyServerSession::Connect --- returns %d", error); sl@0: return error; sl@0: } sl@0: sl@0: TInt RMediaClientPolicyServerSession::SendMessage( TInt aFunction, const TIpcArgs &aArgs ) const sl@0: { sl@0: DEBUG_PRINTF("RMediaClientPolicyServerSession::SendMessage +++"); sl@0: sl@0: TInt error = SendReceive( aFunction, aArgs ); sl@0: sl@0: DEBUG_PRINTF2("RMediaClientPolicyServerSession::SendMessage --- returns %d", error); sl@0: return error; sl@0: }