mmresourcemgmt/mmresctrl/src/mmrcserver/mmrcserversession.cpp
author hgs
Fri, 08 Oct 2010 19:40:43 +0100
changeset 0 79dd3e2336a0
permissions -rw-r--r--
2010wk36_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     1
// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     2
// All rights reserved.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     7
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     8
// Initial Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    10
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    11
// Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    12
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    13
// Description:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    14
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    15
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    16
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    17
#include "mmrcserversession.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    18
#include "mmrcerrorcodes.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    19
#include "mmrcservercontroller.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    20
#include "mmrcadaptationproxy.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    21
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    22
#include <a3f/maudiocontext.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    23
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    24
#include "mlogicalchain.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    25
#include "logicalaudiostream.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    26
#include "audiocontext.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    27
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    28
#include <a3f/a3ffourcclookup.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    29
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    30
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    31
//------------------------------------------------------------------------------------
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    32
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    33
//------------------------------------------------------------------------------------
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    34
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    35
 * By default Symbian 2nd phase constructor is private.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    36
 * @param CMMRCServerController& A reference on the MMRC Server controller
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    37
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    38
CMMRCServerSession::CMMRCServerSession(CMMRCServerController& aServerController, 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    39
									const CFourCCConvertor& aFourCCConvertor)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    40
: iMMRCServerController(aServerController),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    41
  iShutdown(0),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    42
  iLogicalChainRequested(NULL),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    43
  iLogicalChainLastCommited(NULL),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    44
  iLogicalChainRequestResponse(NULL),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    45
  iLogicalChainPreemptionNotification(NULL)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    46
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    47
	TRACE_CREATE();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    48
	DP_CONTEXT(----> CMMRCServerSession::CMMRCServerSession *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    49
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    50
	iFourCCConvertor = &aFourCCConvertor;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    51
	DP_OUT();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    52
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    53
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    54
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    55
 * Destructor
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    56
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    57
CMMRCServerSession::~CMMRCServerSession()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    58
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    59
 	DP_CONTEXT(----> CMMRCServerSession::~CMMRCServerSession *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    60
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    61
	//remove any request associated to this session from the controller
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    62
	iMMRCServerController.CloseSessionByContextId(iContextId);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    63
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    64
	if (iMMRCServerSideAdaptationResponseAO)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    65
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    66
		delete iMMRCServerSideAdaptationResponseAO;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    67
		iMMRCServerSideAdaptationResponseAO=0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    68
		};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    69
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    70
 	if(	iLogicalChainLastCommited )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    71
 		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    72
		iLogicalChainLastCommited->Release();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    73
 		iLogicalChainLastCommited = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    74
 		};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    75
 	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    76
 	if(	iLogicalChainRequested )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    77
 		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    78
		iLogicalChainRequested->Release();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    79
 		iLogicalChainRequested = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    80
 		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    81
 	if(	iLogicalChainRequestResponse )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    82
 		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    83
		iLogicalChainRequestResponse->Release();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    84
		iLogicalChainRequestResponse = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    85
 		};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    86
 		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    87
 	if(	iLogicalChainPreemptionNotification )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    88
 		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    89
		iLogicalChainPreemptionNotification->Release();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    90
		iLogicalChainPreemptionNotification = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    91
 		};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    92
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    93
	iMsgQueue.Close();	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    94
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    95
	DP_OUT();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    96
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    97
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    98
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    99
 * Constructs, and returns a pointer to, a new CMMRCServerSession object.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   100
 * Leaves on failure.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   101
 * @param CMMRCServerController& A reference on the MMRC Server controller
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   102
 * @param CFourCCConvertor& A reference to the Fourcc to format converter 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   103
 * @return CMMRCServerSession* A pointer to newly created utlitly object.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   104
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   105
CMMRCServerSession* CMMRCServerSession::NewL(CMMRCServerController& aServerController, 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   106
											const CFourCCConvertor& aFourCCConvertor)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   107
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   108
	DP_STATIC_CONTEXT(----> CMMRCServerSession::NewL *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   109
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   110
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   111
	CMMRCServerSession* self = NewLC(aServerController, aFourCCConvertor);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   112
	CleanupStack::Pop(self);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   113
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   114
    DP0_RET(self, "self=0x%x");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   115
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   116
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   117
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   118
 * Constructs, leaves object on the cleanup stack, and returns a pointer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   119
 * to, a new CMMRCServerSession object.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   120
 * Leaves on failure.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   121
 * @param CMMRCServerController& A reference on the MMRC Server controller
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   122
 * @param CFourCCConvertor& A reference to the Fourcc to format converter  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   123
 * @return CMMRCServerSession* A pointer to newly created utlitly object.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   124
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   125
CMMRCServerSession* CMMRCServerSession::NewLC(CMMRCServerController& aServerController, 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   126
											const CFourCCConvertor& aFourCCConvertor)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   127
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   128
	DP_STATIC_CONTEXT(----> CMMRCServerSession::NewLC *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   129
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   130
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   131
	CMMRCServerSession* self = new(ELeave) CMMRCServerSession(aServerController, aFourCCConvertor);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   132
	CleanupStack::PushL( self );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   133
	self->ConstructL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   134
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   135
	DP0_RET(self, "self=0x%x");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   136
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   137
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   138
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   139
 	CMMRCServerSession::ConstructL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   140
 	Symbian 2nd phase constructor can leave.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   141
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   142
void CMMRCServerSession::ConstructL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   143
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   144
 	DP_CONTEXT(----> CMMRCServerSession::ConstructL *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   145
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   146
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   147
	iContextId = reinterpret_cast<TUint32>(this);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   148
	iMMRCServerSideAdaptationResponseAO = CMMRCServerSideAdaptationResponseAO::NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   149
	iMMRCServerSideAdaptationResponseAO->Initialize(this, &iServerThread);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   150
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   151
	DP_OUT();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   152
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   153
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   154
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   155
 * from CSession2
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   156
 * @param aMessage - Function and data for the session
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   157
 */	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   158
void CMMRCServerSession::ServiceL(const RMessage2& aMessage)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   159
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   160
 	DP_CONTEXT(----> CMMRCServerSession::ServiceL *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   161
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   162
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   163
	TRAPD( errL, DispatchMessageL(aMessage) );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   164
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   165
	if( errL != KErrNone )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   166
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   167
		#ifdef SYMBIAN_MULTIMEDIA_ENABLE_LOGGING	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   168
			RDebug::Print(_L("CMMRCServerSession::ServiceL - err %d"), errL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   169
		#endif
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   170
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   171
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   172
	DP_OUT();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   173
	}	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   174
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   175
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   176
 * Dispatch the message received from ServeL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   177
 * EMMRCClientToServerSetMsgQueueHandle - Initialise the queue handler
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   178
 * EMMRCClientToServerMessage - Process a message from the client
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   179
 * EMMRCClientToServerMessageUpdate - Process a message update from the client
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   180
 * EMMRCClientToServerMessageAcknowledgement - Process the acknowldgement from the client
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   181
 * @param aMessage - Function and data for the session
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   182
 * @return error code
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   183
 * @leave in case of writeL leave or request leave
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   184
 */	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   185
TInt CMMRCServerSession::DispatchMessageL(const RMessage2& aMessage)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   186
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   187
 	DP_CONTEXT(----> CMMRCServerSession::DispatchMessageL *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   188
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   189
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   190
	TInt error(KErrNone);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   191
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   192
	TMMRCClientToServerMessages messageFunction = static_cast<TMMRCClientToServerMessages>(aMessage.Function());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   193
	switch(messageFunction)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   194
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   195
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   196
		case EMMRCClientToServerSetClientThreadId:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   197
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   198
			TThreadId* id = static_cast<TThreadId*>(const_cast<TAny *>(aMessage.Ptr0()));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   199
			iClientThread.Open(*id);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   200
			RThread me;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   201
			iServerThread.Open(me.Id());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   202
			aMessage.Complete(error);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   203
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   204
		break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   205
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   206
		case EMMRCClientToServerSetAdaptationProxy:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   207
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   208
			iMMRCClientSideServerRequestToAdaptationAO = static_cast<CMMRCClientSideServerRequestToAdaptationAO*>(const_cast<TAny *>(aMessage.Ptr0()));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   209
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   210
			if(iMMRCClientSideServerRequestToAdaptationAO)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   211
				{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   212
				iMMRCClientSideServerRequestToAdaptationAO->Initialize(this, 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   213
															iMMRCServerSideAdaptationResponseAO, 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   214
															&iClientThread, 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   215
															*iFourCCConvertor);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   216
				}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   217
			aMessage.Complete(error);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   218
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   219
		break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   220
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   221
		case EMMRCClientToServerSetMsgQueueHandle:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   222
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   223
			error = iMsgQueue.Open( aMessage, 0 ); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   224
			aMessage.Complete(error);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   225
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   226
		break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   227
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   228
		case EMMRCClientToServerCloseSession:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   229
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   230
			//set a flag so that any subsequent acknowledgment will be ignored...
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   231
			iShutdown=ETrue;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   232
			aMessage.Complete(error);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   233
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   234
		break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   235
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   236
		case EMMRCClientToServerRequestResource:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   237
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   238
			error = EnqueueRequestL(aMessage);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   239
			// AM this is needed since the request is not asynchronous.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   240
			// It is processed asynchronously which is different
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   241
			aMessage.Complete(error);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   242
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   243
		break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   244
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   245
		case EMMRCClientToServerRequestContextId:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   246
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   247
			// CDS This code does not appear to be handling PlatSec functionality well
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   248
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   249
			TProcessId PID;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   250
			TPckg<TProcessId> processIdPckg(PID);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   251
			TPckgBuf<TUint64> contextIdPckg;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   252
						
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   253
			aMessage.ReadL( 0, processIdPckg );			
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   254
			
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   255
			RProcess client;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   256
			TInt err = client.Open(PID);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   257
			if(err == KErrNone)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   258
				{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   259
				iClientHasMMCapability = client.HasCapability(ECapabilityMultimediaDD, KSuppressPlatSecDiagnostic);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   260
				iClientHasUECapability = client.HasCapability(ECapabilityUserEnvironment, KSuppressPlatSecDiagnostic);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   261
				client.Close();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   262
				}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   263
			aMessage.WriteL( 1, contextIdPckg );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   264
			aMessage.Complete(error);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   265
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   266
		break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   267
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   268
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   269
		case EMMRCClientToServerRegisterAsClient:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   270
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   271
			// ignoring arguments
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   272
			error = iMMRCServerController.EnqueueRequestForAPRL(*this);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   273
			aMessage.Complete(error);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   274
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   275
		break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   276
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   277
		case EMMRCClientToServerCancelRegisterAsClient:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   278
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   279
			// ignoring arguments
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   280
			error = iMMRCServerController.RemoveRequestForAPR(*this);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   281
			aMessage.Complete(error);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   282
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   283
		break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   284
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   285
		case EMMRCClientToServerWillResumePlay:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   286
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   287
			error = iMMRCServerController.WillResumePlay();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   288
			aMessage.Complete(error);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   289
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   290
		break;		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   291
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   292
		default:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   293
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   294
			#ifdef SYMBIAN_MULTIMEDIA_ENABLE_LOGGING	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   295
				RDebug::Print(_L("!!!!CMMRCServerSession::DispatchMessageL - unknown message"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   296
			#endif
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   297
			// Unknown Message
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   298
			error = KErrNotSupported;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   299
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   300
		break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   301
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   302
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   303
	DP0_RET(error, "err=%d");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   304
	}	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   305
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   306
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   307
 * Process a message that can be
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   308
 *     EMMRCMessageStateAffecting a state-effecting message
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   309
 *     EMMRCMessageCommit a resource request
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   310
 * @param const RMessage2& aMessage
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   311
 */	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   312
void CMMRCServerSession::PreProcessRequestL(const RMessage2& aMessage)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   313
 	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   314
 	DP_CONTEXT(----> CMMRCServerSession::PreprocessMessageL *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   315
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   316
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   317
	MLogicalChain* logicalChainRequested = static_cast<MLogicalChain*>(const_cast<TAny *>(aMessage.Ptr1()));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   318
	if( logicalChainRequested == NULL )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   319
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   320
		#ifdef _DEBUG	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   321
			RDebug::Print(_L("!!!!CMMRCServerSession::PreProcessRequestL - logicalChainRequested NULL"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   322
			ASSERT(0);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   323
		#endif
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   324
		User::Leave(KErrArgument);	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   325
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   326
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   327
	TInt err1 = KErrNone, err2 = KErrNone;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   328
	iAudioContext = static_cast<CAudioContext*>(const_cast<TAny *>(aMessage.Ptr2()));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   329
	MLogicalChain* logicalChainLastCommited = static_cast<MLogicalChain*>(const_cast<TAny *>(aMessage.Ptr0()));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   330
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   331
	if(iLogicalChainLastCommitedStack)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   332
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   333
		iLogicalChainLastCommitedStack->Release();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   334
		iLogicalChainLastCommitedStack = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   335
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   336
	if(iLogicalChainRequestedStack)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   337
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   338
		iLogicalChainRequestedStack->Release();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   339
		iLogicalChainRequestedStack = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   340
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   341
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   342
	iAudioContext->CriticalSection().Wait();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   343
	TInt msgVersion = iAudioContext->MsgVersion();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   344
	if(msgVersion == aMessage.Int3())
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   345
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   346
		if(logicalChainLastCommited)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   347
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   348
			TRAP(err1, iLogicalChainLastCommitedStack = logicalChainLastCommited->CloneL());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   349
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   350
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   351
		if(logicalChainRequested)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   352
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   353
			TRAP(err2, iLogicalChainRequestedStack = logicalChainRequested->CloneL());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   354
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   355
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   356
	iAudioContext->CriticalSection().Signal();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   357
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   358
	if(msgVersion != aMessage.Int3())
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   359
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   360
		User::Leave(KErrCompletion);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   361
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   362
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   363
	if(err1!=KErrNone)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   364
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   365
		#ifdef SYMBIAN_MULTIMEDIA_ENABLE_LOGGING
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   366
			RDebug::Print(_L("!!!!CMMRCServerSession::PreProcessRequestL - logicalChainLastCommited->CloneL - error = %d"), err1);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   367
		#endif
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   368
		ASSERT(0);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   369
		User::Leave(err1);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   370
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   371
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   372
	if(err2!=KErrNone)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   373
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   374
		#ifdef SYMBIAN_MULTIMEDIA_ENABLE_LOGGING	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   375
			RDebug::Print(_L("!!!!CMMRCServerSession::PreProcessRequestL - logicalChainRequested->CloneL - error = %d"), err2);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   376
		#endif
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   377
		if(iLogicalChainLastCommitedStack)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   378
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   379
			iLogicalChainRequestedStack->Release();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   380
			iLogicalChainRequestedStack = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   381
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   382
		ASSERT(0);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   383
		User::Leave(err2);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   384
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   385
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   386
	DP_OUT();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   387
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   388
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   389
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   390
 * Process a message that can be
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   391
 *     EMMRCMessageStateAffecting a state-effecting message
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   392
 *     EMMRCMessageCommit a resource request
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   393
 * @param const RMessage2& aMessage
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   394
 */	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   395
TInt CMMRCServerSession::EnqueueRequestL(const RMessage2& aMessage)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   396
 	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   397
 	DP_CONTEXT(----####> CMMRCServerSession::ProcessRequestL *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   398
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   399
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   400
	TInt err = KErrNone;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   401
	TRAP(err, PreProcessRequestL(aMessage));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   402
	if( err == KErrNone )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   403
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   404
		err = iMMRCServerController.EnqueueRequestL(*this);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   405
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   406
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   407
	DP0_RET(err, "err = %d");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   408
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   409
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   410
/*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   411
 * 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   412
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   413
void CMMRCServerSession::StartProcessL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   414
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   415
 	DP_CONTEXT(----> CMMRCServerSession::StartProcessL *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   416
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   417
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   418
 	if( iLogicalChainLastCommited )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   419
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   420
		//jjpy TODO should compare with iLogicalChainRequestedStack
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   421
		iLogicalChainLastCommited->Release();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   422
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   423
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   424
	if(iLogicalChainRequested)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   425
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   426
		#ifdef _DEBUG	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   427
			RDebug::Print(_L("!!!!CMMRCServerSession::StartProcessL - iLogicalChainRequested not NULL"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   428
			ASSERT(0);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   429
		#endif
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   430
		iLogicalChainRequested->Release();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   431
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   432
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   433
	iLogicalChainLastCommited = iLogicalChainLastCommitedStack;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   434
	iLogicalChainRequested = iLogicalChainRequestedStack;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   435
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   436
	iLogicalChainLastCommitedStack = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   437
	iLogicalChainRequestedStack = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   438
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   439
	//Send the CommitUpdate to the client
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   440
 	TMMRCQueueItem messageItem;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   441
 	messageItem.iRequestType = EMMRCRequestCommitUpdate;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   442
	messageItem.iResult = EMMRCServerToClientCommitUpdate;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   443
	messageItem.iErrorCode = KErrNone;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   444
 	TInt errSend = iMsgQueue.Send(messageItem);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   445
	#ifdef _DEBUG	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   446
		if(errSend!=KErrNone)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   447
 		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   448
		RDebug::Print(_L("!!!!CMMRCServerSession::PreProcessRequestL - error = %d"), errSend);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   449
		ASSERT(0);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   450
 		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   451
	#endif
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   452
	User::LeaveIfError(errSend);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   453
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   454
	DP_OUT();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   455
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   456
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   457
/*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   458
 * 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   459
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   460
void CMMRCServerSession::StartPreemptionL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   461
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   462
 	DP_CONTEXT(----> CMMRCServerSession::StartPreemptionL *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   463
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   464
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   465
	//Should be NULL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   466
	if(iLogicalChainRequested)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   467
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   468
		#ifdef _DEBUG	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   469
			RDebug::Print(_L("!!!!CMMRCServerSession::StartPreemptionL - iLogicalChainRequested not NULL"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   470
			ASSERT(0);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   471
		#endif
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   472
		iLogicalChainRequested->Release();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   473
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   474
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   475
	//Should NOT be NULL.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   476
	if( iLogicalChainLastCommited )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   477
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   478
		iLogicalChainRequested = iLogicalChainLastCommited->CloneL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   479
		CLogicalAudioStream* audiostream = static_cast<CLogicalAudioStream*>(iLogicalChainRequested);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   480
		TAudioState state = audiostream->StreamState();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   481
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   482
		// MMRC wont't support demote to EIdle anymore
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   483
		// All stream are demote to EInitialised
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   484
		switch(state)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   485
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   486
			case EIdle:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   487
				{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   488
				audiostream->Unload();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   489
				}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   490
				break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   491
				
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   492
			case EPrimed:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   493
			case EActive:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   494
				{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   495
				User::LeaveIfError(audiostream->Stop());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   496
				audiostream->Unload();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   497
				}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   498
				break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   499
			default:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   500
				#ifdef _DEBUG	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   501
					RDebug::Print(_L("!!!!CMMRCServerSession::StartPreemptionL - wrong state "));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   502
					ASSERT(0);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   503
				#endif
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   504
				break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   505
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   506
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   507
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   508
	DP_OUT();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   509
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   510
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   511
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   512
 * Callback on a resource request
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   513
 * @param TMMRCServerToClientMessageResults aResult the result on the request
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   514
 * @leave
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   515
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   516
void CMMRCServerSession::AdaptationRequestAcknowledgment(TMMRCAdaptationToServerRequestResults aResult, TInt aError)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   517
 	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   518
 	DP_CONTEXT(----@@@@> CMMRCServerSession::AdaptationRequestAcknowledgment *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   519
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   520
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   521
 	TMMRCQueueItem messageItem;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   522
 	messageItem.iRequestType = EMMRCRequestCommitResponse;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   523
 	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   524
 	switch(aResult)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   525
 		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   526
  		case EMMRCAdaptationToServerResourceComplete:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   527
 			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   528
 			TUint64 contextId;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   529
 			TMMRCServerState serverState;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   530
 			iMMRCServerController.ServerState(serverState, contextId);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   531
			switch(serverState)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   532
				{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   533
 				case EMMRCServerStateWaitResourceResponseFromAdaptation: // here we process the response
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   534
		 	  		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   535
		 	  		messageItem.iResult = EMMRCServerToClientResourceAgreed;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   536
		 	 	 	messageItem.iErrorCode = aError;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   537
		 	 		iMMRCServerController.AdaptationRequestAcknowledgment(*this, aResult, aError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   538
		 	 		SendRequestResponseToClient(messageItem);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   539
 					} //end case EMMRCServerStateWaitResourceResponseFromAdaptation
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   540
 	 				break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   541
				case EMMRCServerStateWaitPreemptionResponse: // here we process the response
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   542
					{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   543
			 	 	messageItem.iResult = EMMRCServerToClientResourcePreempt;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   544
		 	 	 	messageItem.iErrorCode = KErrCompletion;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   545
					iMMRCServerController.AdaptationRequestAcknowledgment(*this, aResult, KErrCompletion);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   546
					SendPreemptionNotificationToClient(messageItem);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   547
					}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   548
					break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   549
				default:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   550
					{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   551
					#ifdef _DEBUG	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   552
						RDebug::Print(_L("!!!!CMMRCServerSession::AdaptationRequestAcknowledgment - Unknown message"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   553
						ASSERT(0);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   554
					#endif
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   555
					}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   556
					break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   557
				} //end case EMMRCServerStateWaitPreemptionRespons
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   558
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   559
 			break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   560
 			
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   561
 		case EMMRCAdaptationToServerResourceIncomplete:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   562
 			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   563
	 	  		messageItem.iResult = EMMRCServerToClientResourceDenied;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   564
	 	 	 	messageItem.iErrorCode = aError;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   565
	 	 		iMMRCServerController.AdaptationRequestAcknowledgment(*this, aResult, aError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   566
	 	 		SendRequestResponseToClient(messageItem);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   567
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   568
 			break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   569
 			
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   570
 		case EMMRCAdaptationToServerResourceTimeout:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   571
 			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   572
 	 	 	messageItem.iResult = EMMRCServerToClientRequestError;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   573
 	 	 	messageItem.iErrorCode = KErrCompletion;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   574
			iMMRCServerController.AdaptationRequestAcknowledgment(*this, EMMRCAdaptationToServerResourceTimeout, KErrCompletion);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   575
			SendRequestResponseToClient(messageItem);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   576
 			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   577
 			break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   578
 			
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   579
		default:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   580
 			break;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   581
 		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   582
 	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   583
  	DP_OUT();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   584
  	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   585
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   586
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   587
 * 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   588
 * 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   589
 */	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   590
void CMMRCServerSession::SendRequestResponseToClient(TMMRCQueueItem& messageItem)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   591
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   592
 	DP_CONTEXT(----====> CMMRCServerSession::SendRequestResponseToClient *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   593
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   594
	if(messageItem.iErrorCode == KErrNone)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   595
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   596
		//1) Set the iLogicalChainRequestResponse
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   597
		if(iLogicalChainRequestResponse)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   598
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   599
			iLogicalChainRequestResponse->Release();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   600
			iLogicalChainRequestResponse = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   601
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   602
		if(iLogicalChainRequested)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   603
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   604
			TInt errT;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   605
			TRAP(errT, iLogicalChainRequestResponse = iLogicalChainRequested->CloneL());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   606
			DP1(DLERR,"ECloneLeftWhenSendingResponseToClient %d", errT);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   607
			__ASSERT_DEBUG(errT == KErrNone, Panic(ECloneLeftWhenSendingResponseToClient));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   608
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   609
		//2) Set the last commited chain et set the desired one to NULL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   610
		if( iLogicalChainLastCommited )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   611
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   612
			iLogicalChainLastCommited->Release();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   613
			iLogicalChainLastCommited = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   614
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   615
		iLogicalChainLastCommited = iLogicalChainRequested;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   616
		iLogicalChainRequested = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   617
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   618
	else //In case of ERROR
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   619
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   620
		//1) Set the iLogicalChainRequestResponse
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   621
		if(iLogicalChainRequestResponse)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   622
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   623
			iLogicalChainRequestResponse->Release();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   624
			iLogicalChainRequestResponse = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   625
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   626
		if(iLogicalChainRequested)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   627
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   628
			TInt errT;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   629
			TRAP(errT, iLogicalChainRequestResponse = iLogicalChainLastCommited->CloneL());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   630
			DP1(DLERR,"ECloneLeftWhenSendingResponseToClient %d", errT);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   631
			__ASSERT_DEBUG(errT == KErrNone, Panic(ECloneLeftWhenSendingResponseToClient));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   632
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   633
		//2) Set the last commited chain et set the desired one to NULL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   634
		if( iLogicalChainRequested )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   635
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   636
			iLogicalChainRequested->Release();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   637
			iLogicalChainRequested = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   638
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   639
			
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   640
		if(iLogicalChainRequestedStack)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   641
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   642
			CLogicalAudioStream* lChain = static_cast <CLogicalAudioStream*>(iLogicalChainLastCommited);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   643
			TAudioTypeSettings settings;	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   644
			settings.iPriority = iLogicalChainRequestedStack->Priority();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   645
			settings.iPref = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   646
			lChain->SetAudioType(settings);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   647
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   648
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   649
	// Set the data for the client
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   650
	messageItem.iData = iLogicalChainRequestResponse;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   651
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   652
 	//send the response to the client
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   653
 	TInt errSend = iMsgQueue.Send(messageItem);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   654
	DP1(DLERR,"EMsgQueueFailedToSendMsg %d", errSend);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   655
	__ASSERT_DEBUG(errSend == KErrNone, Panic(EMsgQueueFailedToSendMsg));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   656
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   657
  	DP_OUT();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   658
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   659
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   660
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   661
 * 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   662
 * 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   663
 */	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   664
void CMMRCServerSession::SendPreemptionNotificationToClient(TMMRCQueueItem& messageItem)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   665
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   666
 	DP_CONTEXT(----~~~~> CMMRCServerSession::SendRequestResponseToClient *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   667
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   668
	//1) Set the iLogicalChainPreemptionNotification
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   669
	if(iLogicalChainPreemptionNotification)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   670
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   671
		iLogicalChainPreemptionNotification->Release();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   672
		iLogicalChainPreemptionNotification = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   673
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   674
	if(iLogicalChainRequested)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   675
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   676
		TInt errT;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   677
		TRAP(errT, iLogicalChainPreemptionNotification = iLogicalChainRequested->CloneL());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   678
		DP1(DLERR,"ECloneLeftWhenSendingResponseToClient %d", errT);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   679
		__ASSERT_DEBUG(errT == KErrNone, Panic(ECloneLeftWhenSendingResponseToClient));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   680
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   681
		iLogicalChainRequested->Release();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   682
		iLogicalChainRequested = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   683
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   684
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   685
	messageItem.iData = iLogicalChainPreemptionNotification;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   686
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   687
 	//send the response to the client
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   688
 	TInt errSend = iMsgQueue.Send(messageItem);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   689
	DP1(DLERR,"EMsgQueueFailedToSendMsg %d", errSend);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   690
	__ASSERT_DEBUG(errSend == KErrNone, Panic(EMsgQueueFailedToSendMsg));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   691
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   692
  	DP_OUT();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   693
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   694
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   695
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   696
 * Notify all the paused client that a resource has been unallocated
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   697
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   698
void CMMRCServerSession::NotifyClientResourceUnallocated()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   699
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   700
	DP_CONTEXT(----****> CMMRCServerSession::NotifyClientsResourceUnallocated *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   701
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   702
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   703
 	TMMRCQueueItem messageItem;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   704
 	messageItem.iRequestType = EMMRCRequestResourceUnallocated;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   705
 	TInt errSend = iMsgQueue.Send(messageItem);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   706
	DP1(DLERR,"EMsgQueueFailedToSendMsg %d", errSend);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   707
	__ASSERT_DEBUG(errSend == KErrNone, Panic(EMsgQueueFailedToSendMsg));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   708
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   709
	DP_OUT();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   710
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   711
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   712
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   713
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   714
 * return the current committed chain (const)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   715
 * @return the current committed chain
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   716
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   717
const MLogicalChain* CMMRCServerSession::LogicalChainRequested() const
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   718
 	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   719
 	DP_CONTEXT(----> CMMRCServerSession::LogicalChainRequested const *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   720
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   721
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   722
	DP0_RET(iLogicalChainRequested, "iLogicalChainRequested=0x%x");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   723
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   724
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   725
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   726
 * return the current committed chain (const)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   727
 * @return the current committed chain
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   728
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   729
const MLogicalChain* CMMRCServerSession::LogicalChainRequestedStack() const
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   730
 	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   731
 	DP_CONTEXT(----> CMMRCServerSession::LogicalChainRequestedStack const *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   732
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   733
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   734
	DP0_RET(iLogicalChainRequestedStack, "iLogicalChainRequestedStack=0x%x");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   735
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   736
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   737
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   738
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   739
 * return the last committed chain (const)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   740
 * @return the last committed chain
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   741
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   742
const MLogicalChain* CMMRCServerSession::LogicalChainLastCommited() const
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   743
 	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   744
 	DP_CONTEXT(----> CMMRCServerSession::LogicalChainLastCommited const *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   745
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   746
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   747
    DP0_RET(iLogicalChainLastCommited, "iLogicalChainLastCommited=0x%x");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   748
 	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   749
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   750
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   751
 * return the Audio Context (const)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   752
 * @return the Audio Context
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   753
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   754
const MAudioContext* CMMRCServerSession::AudioContext() const
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   755
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   756
 	DP_CONTEXT(----> CMMRCServerSession::AudioContext *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   757
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   758
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   759
    DP0_RET(iAudioContext, "iAudioContext=0x%x");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   760
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   761
 	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   762
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   763
 * return the current committed chain
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   764
 * @return the current committed chain
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   765
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   766
MLogicalChain* CMMRCServerSession::LogicalChainRequested()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   767
  	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   768
 	DP_CONTEXT(----> CMMRCServerSession::LogicalChainRequested *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   769
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   770
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   771
    DP0_RET(iLogicalChainRequested, "iLogicalChainRequested=0x%x");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   772
 	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   773
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   774
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   775
 * return the current committed chain
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   776
 * @return the current committed chain
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   777
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   778
MLogicalChain* CMMRCServerSession::LogicalChainRequestedStack()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   779
  	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   780
 	DP_CONTEXT(----> CMMRCServerSession::LogicalChainRequestedStack *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   781
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   782
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   783
    DP0_RET(iLogicalChainRequestedStack, "iLogicalChainRequestedStack=0x%x");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   784
 	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   785
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   786
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   787
 * return the last committed chain
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   788
 * @return the last committed chain
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   789
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   790
MLogicalChain* CMMRCServerSession::LogicalChainLastCommited()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   791
  	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   792
 	DP_CONTEXT(----> CMMRCServerSession::LogicalChainLastCommited *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   793
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   794
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   795
	DP0_RET(iLogicalChainLastCommited, "iLogicalChainLastCommited=0x%x");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   796
 	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   797
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   798
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   799
 * 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   800
 * @param 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   801
 * @return
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   802
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   803
CMMRCClientSideServerRequestToAdaptationAO* CMMRCServerSession::AdaptationProxy()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   804
{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   805
	DP_CONTEXT(----> CMMRCServerSession::AdaptationProxy *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   806
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   807
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   808
    DP0_RET(iMMRCClientSideServerRequestToAdaptationAO, "iMMRCServerAdaptationProxy=0x%x");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   809
}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   810
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   811
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   812
 * 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   813
 * @param 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   814
 * @return
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   815
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   816
TUint64 CMMRCServerSession::ContextId()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   817
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   818
	DP_CONTEXT(----> CMMRCServerSession::ContextId *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   819
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   820
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   821
    DP0_RET(iContextId, "iContextId=%d");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   822
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   823
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   824
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   825
 * 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   826
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   827
TBool CMMRCServerSession::HasMultimediaCapability() const
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   828
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   829
	return iClientHasMMCapability;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   830
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   831
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   832
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   833
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   834
 * 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   835
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   836
void CMMRCServerSession::Clean()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   837
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   838
	DP_CONTEXT(----> CMMRCServerSession::Clean *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   839
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   840
	DP_OUT();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   841
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   842
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   843
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   844
 * 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   845
 * @param 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   846
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   847
void CMMRCServerSession::Disconnect(const RMessage2& aMessage)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   848
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   849
	DP_CONTEXT(----> CMMRCServerSession::Disconnect *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   850
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   851
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   852
	CSession2::Disconnect(aMessage);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   853
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   854
	DP_OUT();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   855
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   856
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   857
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   858
 * 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   859
 * @return 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   860
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   861
TBool CMMRCServerSession::IsServerShuttingDown()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   862
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   863
	DP_CONTEXT(----> CMMRCServerSession::IsServerShuttingDown *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   864
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   865
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   866
	DP0_RET(iShutdown, "state(bool) = %d");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   867
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   868
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   869
TInt CMMRCServerSession::RequestsSent()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   870
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   871
	return iRequestsSent;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   872
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   873
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   874
void CMMRCServerSession::IncrementRequestsSent()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   875
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   876
	iRequestsSent++;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   877
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   878
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   879
CMMRCServerSideAdaptationResponseAO* CMMRCServerSession::ServerProxy()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   880
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   881
	return iMMRCServerSideAdaptationResponseAO;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   882
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   883
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   884
TInt CMMRCServerSession::SendRequestToAdaptation(TMMRCServerSessionRequestType aRequestType)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   885
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   886
	TInt err=KErrNone;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   887
	if (!IsServerShuttingDown())
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   888
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   889
		IncrementRequestsSent();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   890
		ServerProxy()->StartAdaptationListening();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   891
		AdaptationProxy()->Service(aRequestType);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   892
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   893
	else
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   894
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   895
// send some server shutting down error code.		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   896
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   897
	return err;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   898
	};	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   899
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   900
TInt CMMRCServerSession::GetPriority() const
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   901
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   902
	DP_CONTEXT(----> CMMRCServerSession::GetPriority *CD1*, CtxDevSound, DPLOCAL);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   903
	DP_IN();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   904
	TInt priority = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   905
	if(LogicalChainLastCommited() != NULL)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   906
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   907
		priority = const_cast<MLogicalChain*>( LogicalChainLastCommited() )->Priority();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   908
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   909
	DP0_RET(priority, "priority = %d");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   910
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   911
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   912
void CMMRCServerSession::Panic(TMMRCServerSessionPanicCodes aCode)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   913
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   914
	User::Panic(KMMRCServerSessionPanicCategory, aCode);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   915
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   916
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   917
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   918
 * @ return Boolean value specifying whether Client has UserEnvironment Capability.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   919
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   920
TBool CMMRCServerSession::HasUserEnvironmentCapability()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   921
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   922
	return iClientHasUECapability;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   923
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   924
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   925
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   926
 * @ param Error Value to send
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   927
 * @ return Error Value specifying any error in adding the message to the message queue.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   928
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   929
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   930
TInt CMMRCServerSession::NotifyClientOfError(TInt aError)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   931
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   932
	// Create message and send to Client
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   933
	TMMRCQueueItem messageItem;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   934
 	messageItem.iRequestType = EMMRCRequestCommitUpdate;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   935
	messageItem.iResult = EMMRCServerToClientCommitUpdate;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   936
	messageItem.iErrorCode = KErrNone;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   937
 	TInt errSend = iMsgQueue.Send(messageItem);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   938
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   939
	// Create a message with the Error and send to Client
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   940
 	messageItem.iRequestType = EMMRCRequestCommitResponse;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   941
	messageItem.iResult = EMMRCServerToClientResourceAgreed;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   942
 	messageItem.iErrorCode = aError;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   943
 	TInt errSend2 = iMsgQueue.Send(messageItem);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   944
 	if (errSend!=KErrNone)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   945
 		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   946
 		return errSend;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   947
 		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   948
 	else
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   949
 		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   950
 		return errSend2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   951
 		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   952
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   953
//EOF