os/mm/devsound/a3fdevsound/src/mmfdevsoundproxy/mmfdevsoundcallbackhandler.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
//
sl@0
    15
sl@0
    16
sl@0
    17
sl@0
    18
// INCLUDE FILES
sl@0
    19
#include "mmfdevsoundproxy.h"
sl@0
    20
#include "mmfdevsoundcallbackhandler.h"
sl@0
    21
#ifdef _DEBUG
sl@0
    22
#include <e32debug.h>
sl@0
    23
sl@0
    24
#define SYMBIAN_DEBPRN0(str)                RDebug::Print(str, this)
sl@0
    25
#define SYMBIAN_DEBPRN1(str, val1)          RDebug::Print(str, this, val1)
sl@0
    26
#define SYMBIAN_DEBPRN2(str, val1, val2)    RDebug::Print(str, this, val1, val2)
sl@0
    27
#else
sl@0
    28
#define SYMBIAN_DEBPRN0(str)
sl@0
    29
#define SYMBIAN_DEBPRN1(str, val1)
sl@0
    30
#define SYMBIAN_DEBPRN2(str, val1, val2)
sl@0
    31
#endif //_DEBUG
sl@0
    32
sl@0
    33
// ============================ MEMBER FUNCTIONS ==============================
sl@0
    34
sl@0
    35
// ----------------------------------------------------------------------------
sl@0
    36
// CMsgQueueHandler::NewL
sl@0
    37
// Two-phased constructor.
sl@0
    38
// ----------------------------------------------------------------------------
sl@0
    39
//
sl@0
    40
CMsgQueueHandler* CMsgQueueHandler::NewL(
sl@0
    41
						RMMFDevSoundProxy* aDevSoundProxy,
sl@0
    42
						MDevSoundObserver& aDevSoundObserver,
sl@0
    43
						RMsgQueue<TMMFDevSoundQueueItem>* aMsgQueue,
sl@0
    44
						MMMFDevSoundCustomInterfaceObserver& aDevSoundCIObserver)
sl@0
    45
	{
sl@0
    46
	CMsgQueueHandler* self = new(ELeave) CMsgQueueHandler(aDevSoundProxy,
sl@0
    47
														aDevSoundObserver,
sl@0
    48
														aMsgQueue,
sl@0
    49
														aDevSoundCIObserver);
sl@0
    50
	CleanupStack::PushL(self);
sl@0
    51
	self->ConstructL();
sl@0
    52
	CleanupStack::Pop(self);
sl@0
    53
	return self;
sl@0
    54
	}
sl@0
    55
sl@0
    56
// ----------------------------------------------------------------------------
sl@0
    57
// CMsgQueueHandler::CMsgQueueHandler
sl@0
    58
// C++ default constructor can NOT contain any code, that might leave.
sl@0
    59
// ----------------------------------------------------------------------------
sl@0
    60
//
sl@0
    61
CMsgQueueHandler::CMsgQueueHandler (RMMFDevSoundProxy* aDevSoundProxy,
sl@0
    62
									MDevSoundObserver& aDevSoundObserver,
sl@0
    63
									RMsgQueue<TMMFDevSoundQueueItem>* aMsgQueue,
sl@0
    64
									MMMFDevSoundCustomInterfaceObserver& aDevSoundCIObserver)
sl@0
    65
:	CActive(EPriorityStandard),
sl@0
    66
	iDevSoundProxy(aDevSoundProxy),
sl@0
    67
	iDevSoundObserver(aDevSoundObserver),
sl@0
    68
	iMsgQueue(aMsgQueue),
sl@0
    69
	iChunkDataPtr(0, 0, 0),
sl@0
    70
	iDevSoundCIObserver(aDevSoundCIObserver)
sl@0
    71
	{
sl@0
    72
	CActiveScheduler::Add(this);
sl@0
    73
	}
sl@0
    74
sl@0
    75
// ----------------------------------------------------------------------------
sl@0
    76
// CMsgQueueHandler::ConstructL
sl@0
    77
// Symbian 2nd phase constructor can leave.
sl@0
    78
// ----------------------------------------------------------------------------
sl@0
    79
//
sl@0
    80
void CMsgQueueHandler::ConstructL()
sl@0
    81
	{
sl@0
    82
	iEmptyBuffer = CMMFDescriptorBuffer::NewL(0);
sl@0
    83
	iAsyncQueueFinish = new (ELeave) CAsyncCallBack(CActive::EPriorityStandard);
sl@0
    84
	TCallBack asyncCallback(AsyncQueueFinishCallback, this);
sl@0
    85
	iAsyncQueueFinish->Set(asyncCallback);
sl@0
    86
	}
sl@0
    87
sl@0
    88
// ----------------------------------------------------------------------------
sl@0
    89
// CMsgQueueHandler::~CMsgQueueHandler
sl@0
    90
// Destructor.
sl@0
    91
// ----------------------------------------------------------------------------
sl@0
    92
//
sl@0
    93
CMsgQueueHandler::~CMsgQueueHandler()
sl@0
    94
	{
sl@0
    95
	Cancel();
sl@0
    96
	if ( iMsgQueue )
sl@0
    97
		{
sl@0
    98
		iMsgQueue->Close();
sl@0
    99
		}
sl@0
   100
	iChunk.Close();
sl@0
   101
	
sl@0
   102
	delete iDataBuffer;
sl@0
   103
	delete iEmptyBuffer;
sl@0
   104
	delete iAsyncQueueFinish;
sl@0
   105
	}
sl@0
   106
sl@0
   107
// ----------------------------------------------------------------------------
sl@0
   108
// CMsgQueueHandler::ReceiveEvents
sl@0
   109
// Subscribes for Play Error event from the DevSound server.
sl@0
   110
// ----------------------------------------------------------------------------
sl@0
   111
//
sl@0
   112
void CMsgQueueHandler::ReceiveEvents()
sl@0
   113
	{
sl@0
   114
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::ReceiveEvents - Enter"));	
sl@0
   115
    if (!IsActive())
sl@0
   116
		{
sl@0
   117
		iMsgQueue->NotifyDataAvailable(iStatus);
sl@0
   118
		SetActive();
sl@0
   119
		}
sl@0
   120
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::ReceiveEvents - Exit"));
sl@0
   121
	}
sl@0
   122
sl@0
   123
// ----------------------------------------------------------------------------
sl@0
   124
// CMsgQueueHandler::RunL
sl@0
   125
// Handles active object’s request completion event.
sl@0
   126
//
sl@0
   127
// ----------------------------------------------------------------------------
sl@0
   128
//
sl@0
   129
void CMsgQueueHandler::RunL()
sl@0
   130
	{
sl@0
   131
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::RunL - Enter"));
sl@0
   132
    TInt err = iMsgQueue->Receive(iCurrentItem);
sl@0
   133
sl@0
   134
	if (err == KErrNone || err == KErrUnderflow)
sl@0
   135
		{
sl@0
   136
		// Signal that we're ready to process the next message
sl@0
   137
		ReceiveEvents();
sl@0
   138
		}
sl@0
   139
sl@0
   140
	if (err == KErrNone)
sl@0
   141
		{
sl@0
   142
		switch (iCurrentItem.iRequest)
sl@0
   143
			{
sl@0
   144
			case EMMFDevSoundProxyICEvent:
sl@0
   145
				{
sl@0
   146
				DoInitComplete();
sl@0
   147
				break;
sl@0
   148
				}
sl@0
   149
			case EMMFDevSoundProxyBTBFEvent:
sl@0
   150
				{
sl@0
   151
				iAsyncQueueFinish->Cancel(); // if still active, means previous cycle did not Finish(). Cancel.
sl@0
   152
				TRAP(err, DoBTBFCompleteL());
sl@0
   153
				if (err)
sl@0
   154
					{
sl@0
   155
					iAsyncQueueFinish->CallBack(); // async call to Finish()
sl@0
   156
					iDevSoundObserver.PlayError(err);
sl@0
   157
					}
sl@0
   158
				}
sl@0
   159
				break;
sl@0
   160
			case EMMFDevSoundProxyBTBEEvent:
sl@0
   161
				{
sl@0
   162
				iAsyncQueueFinish->Cancel(); // if still active, means previous cycle did not Finish(). Cancel.
sl@0
   163
				TRAP(err, DoBTBECompleteL());
sl@0
   164
				if (err)
sl@0
   165
					{
sl@0
   166
					iAsyncQueueFinish->CallBack(); // async call to Finish()
sl@0
   167
					iDevSoundObserver.RecordError(err);
sl@0
   168
					}
sl@0
   169
				}
sl@0
   170
				break;
sl@0
   171
			case EMMFDevSoundProxyPEEvent:
sl@0
   172
				{
sl@0
   173
				if (iCurrentItem.iErrorCode == KErrDied ||
sl@0
   174
					iCurrentItem.iErrorCode == KErrNotReady)
sl@0
   175
					{ 
sl@0
   176
					DoPlayErrorComplete();
sl@0
   177
					// "this" pointer is no longer valid here as the associated
sl@0
   178
					// instance of the DevSound has been deleted along with this
sl@0
   179
					// CMsgQueueHandler object. So, we can only return here.
sl@0
   180
					return;
sl@0
   181
					}
sl@0
   182
				else
sl@0
   183
					{
sl@0
   184
					DoPlayErrorComplete();
sl@0
   185
					break;
sl@0
   186
					}
sl@0
   187
				}
sl@0
   188
			case EMMFDevSoundProxyREEvent:
sl@0
   189
				{
sl@0
   190
				DoRecordErrorComplete();
sl@0
   191
				break;
sl@0
   192
				}
sl@0
   193
			case EMMFDevSoundProxyTFEvent:
sl@0
   194
				{
sl@0
   195
				DoToneFinishedComplete();
sl@0
   196
				break;
sl@0
   197
				}
sl@0
   198
			case EMMFDevSoundProxySETCEvent:
sl@0
   199
				{
sl@0
   200
				DoSendEventToClientComplete();
sl@0
   201
				break;
sl@0
   202
				}
sl@0
   203
			case EMMFDevSoundCustomCommandCloseMuxDemuxPair:
sl@0
   204
				{
sl@0
   205
				TMMFEvent pckgevent = iCurrentItem.iEventPckg();
sl@0
   206
				TInt handle = pckgevent.iEventType.iUid;
sl@0
   207
				iDevSoundCIObserver.CloseCustomInterface(handle);
sl@0
   208
				break;
sl@0
   209
				}
sl@0
   210
			case EMMFDevSoundProxyPausedRecordCompleteEvent:
sl@0
   211
				{
sl@0
   212
				DoPausedRecordComplete();
sl@0
   213
				break;
sl@0
   214
				}
sl@0
   215
			default:
sl@0
   216
				{
sl@0
   217
				break;
sl@0
   218
				}
sl@0
   219
			}
sl@0
   220
		}
sl@0
   221
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::RunL - Exit"));
sl@0
   222
	}
sl@0
   223
sl@0
   224
// ----------------------------------------------------------------------------
sl@0
   225
// CMsgQueueHandler::RunError
sl@0
   226
// Called by CActive object framework if RunL leaves.
sl@0
   227
// ----------------------------------------------------------------------------
sl@0
   228
//
sl@0
   229
TInt CMsgQueueHandler::RunError(TInt aError)
sl@0
   230
	{
sl@0
   231
    SYMBIAN_DEBPRN1(_L("CMsgQueueHandler[0x%x]::RunError - Enter. Error [%d]"), aError);
sl@0
   232
    TMMFEvent event;
sl@0
   233
	event.iErrorCode = aError;
sl@0
   234
	iDevSoundObserver.SendEventToClient(event);
sl@0
   235
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::RunError - Exit"));
sl@0
   236
	return KErrNone;
sl@0
   237
	}
sl@0
   238
sl@0
   239
// ----------------------------------------------------------------------------
sl@0
   240
// CMsgQueueHandler::DoCancel
sl@0
   241
// Called when client cancels the wait for a completion of an outstanding
sl@0
   242
// request.
sl@0
   243
// ----------------------------------------------------------------------------
sl@0
   244
//
sl@0
   245
void CMsgQueueHandler::DoCancel()
sl@0
   246
	{
sl@0
   247
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoCancel - Enter"));
sl@0
   248
    iMsgQueue->CancelDataAvailable();
sl@0
   249
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoCancel - Exit"));
sl@0
   250
	}
sl@0
   251
sl@0
   252
// ----------------------------------------------------------------------------
sl@0
   253
// CMsgQueueHandler::DoInitComplete
sl@0
   254
// Handles initialization completion event.
sl@0
   255
// ----------------------------------------------------------------------------
sl@0
   256
//
sl@0
   257
void CMsgQueueHandler::DoInitComplete()
sl@0
   258
	{
sl@0
   259
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoInitComplete - Enter"));
sl@0
   260
    iDevSoundObserver.InitializeComplete(iCurrentItem.iErrorCode);
sl@0
   261
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoInitComplete - Exit"));
sl@0
   262
	}
sl@0
   263
sl@0
   264
// ----------------------------------------------------------------------------
sl@0
   265
// CMsgQueueHandler::DoPlayErrorComplete
sl@0
   266
// Handles play completion or cancel event.
sl@0
   267
// ----------------------------------------------------------------------------
sl@0
   268
//
sl@0
   269
void CMsgQueueHandler::DoPlayErrorComplete()
sl@0
   270
	{
sl@0
   271
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoPlayErrorComplete - Enter"));
sl@0
   272
    iAsyncQueueFinish->CallBack(); // async call to Finish()
sl@0
   273
	iDevSoundObserver.PlayError(iCurrentItem.iErrorCode);
sl@0
   274
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoPlayErrorComplete - Exit"));
sl@0
   275
	}
sl@0
   276
sl@0
   277
// ----------------------------------------------------------------------------
sl@0
   278
// CMsgQueueHandler::DoBTBFCompleteL
sl@0
   279
// Handles CMMFDevSound object's data request event to supply CMMFDevSound
sl@0
   280
// with the buffer that it needs to play.
sl@0
   281
// ----------------------------------------------------------------------------
sl@0
   282
//
sl@0
   283
void CMsgQueueHandler::DoBTBFCompleteL()
sl@0
   284
	{
sl@0
   285
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoBTBFCompleteL - Enter"));
sl@0
   286
    // Returns either chunk handle or NULL
sl@0
   287
	// any error is assumed to be due to a pending PlayError(), so the error here is ignored - the PlayError() call will ensure the client remains lively
sl@0
   288
	// the chunk has been closed by the server. No action should be taken.
sl@0
   289
	TBool requestChunk = iDataBuffer==NULL; // if we have no buffer, tell server we need a chunk handle
sl@0
   290
	TInt handle = iDevSoundProxy->BufferToBeFilledData(requestChunk, iSetPckg);
sl@0
   291
	if(handle >= KErrNone)
sl@0
   292
		{
sl@0
   293
		if ( iSetPckg().iChunkOp == EOpen )
sl@0
   294
			{
sl@0
   295
			AssignDataBufferToChunkL(handle);
sl@0
   296
			}
sl@0
   297
		else
sl@0
   298
			{
sl@0
   299
			UpdateDataBufferL();
sl@0
   300
			}
sl@0
   301
		iDataBuffer->SetStatus(EAvailable);
sl@0
   302
		
sl@0
   303
		// Let the MMF fill the buffer with data
sl@0
   304
		
sl@0
   305
		iDevSoundObserver.BufferToBeFilled(iDataBuffer);
sl@0
   306
		}
sl@0
   307
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoBTBFCompleteL - Exit"));
sl@0
   308
	}
sl@0
   309
sl@0
   310
// ----------------------------------------------------------------------------
sl@0
   311
// CMsgQueueHandler::DoBTBECompleteL
sl@0
   312
// Handles CMMFDevSound object's data request event to supply CMMFDevSound
sl@0
   313
// with the buffer that it needs to record.
sl@0
   314
// ----------------------------------------------------------------------------
sl@0
   315
//
sl@0
   316
void CMsgQueueHandler::DoBTBECompleteL()
sl@0
   317
	{
sl@0
   318
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoBTBECompleteL - Enter"));
sl@0
   319
    // Returns either chunk handle or NULL
sl@0
   320
	// any error is assumed to be due to a pending RecordError(), so the error here is ignored - the RecordError() call will ensure the client remains lively
sl@0
   321
	// the chunk has been closed by the server. No action should be taken.
sl@0
   322
	TInt handle = iDevSoundProxy->BufferToBeEmptiedData(iSetPckg);
sl@0
   323
	if(handle >= KErrNone)
sl@0
   324
		{
sl@0
   325
		if ( iSetPckg().iChunkOp == EOpen )
sl@0
   326
			{
sl@0
   327
			AssignDataBufferToChunkL(handle);
sl@0
   328
			}
sl@0
   329
		iDataBuffer->SetStatus(EFull);	
sl@0
   330
		iDataBuffer->Data().SetLength(iSetPckg().iRequestSize);
sl@0
   331
		iDevSoundObserver.BufferToBeEmptied(iDataBuffer);
sl@0
   332
		}
sl@0
   333
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoBTBECompleteL - Exit"));
sl@0
   334
	}
sl@0
   335
sl@0
   336
// ----------------------------------------------------------------------------
sl@0
   337
// CMsgQueueHandler::DoRecordErrorComplete
sl@0
   338
// Handles record completion or cancel event.
sl@0
   339
// ----------------------------------------------------------------------------
sl@0
   340
//
sl@0
   341
void CMsgQueueHandler::DoRecordErrorComplete()
sl@0
   342
	{
sl@0
   343
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoRecordErrorComplete - Enter"));
sl@0
   344
    iAsyncQueueFinish->CallBack(); // async call to Finish()
sl@0
   345
	iDevSoundObserver.RecordError(iCurrentItem.iErrorCode);
sl@0
   346
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoRecordErrorComplete - Exit"));
sl@0
   347
	}
sl@0
   348
sl@0
   349
// ----------------------------------------------------------------------------
sl@0
   350
// CMsgQueueHandler::DoToneFinishedComplete
sl@0
   351
// Handles tone play completion event.
sl@0
   352
// ----------------------------------------------------------------------------
sl@0
   353
//
sl@0
   354
void CMsgQueueHandler::DoToneFinishedComplete()
sl@0
   355
	{
sl@0
   356
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoToneFinishedComplete - Enter"));
sl@0
   357
    iDevSoundObserver.ToneFinished(iCurrentItem.iErrorCode);
sl@0
   358
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoToneFinishedComplete - Exit"));
sl@0
   359
	}
sl@0
   360
sl@0
   361
// ----------------------------------------------------------------------------
sl@0
   362
// CMsgQueueHandler::DoSendEventToClientComplete
sl@0
   363
// Sends DevSound server event completion notification to the client.
sl@0
   364
// ----------------------------------------------------------------------------
sl@0
   365
//
sl@0
   366
void CMsgQueueHandler::DoSendEventToClientComplete()
sl@0
   367
	{
sl@0
   368
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoSendEventToClientComplete - Enter"));
sl@0
   369
    iDevSoundObserver.SendEventToClient(iCurrentItem.iEventPckg());
sl@0
   370
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoSendEventToClientComplete - Exit"));
sl@0
   371
	}
sl@0
   372
sl@0
   373
// ----------------------------------------------------------------------------
sl@0
   374
// CMsgQueueHandler::DoPausedRecordComplete
sl@0
   375
// Handles CMMFDevSound object's data request event to supply CMMFDevSound
sl@0
   376
// with the last buffer that it needs to record.
sl@0
   377
// ----------------------------------------------------------------------------
sl@0
   378
//
sl@0
   379
void CMsgQueueHandler::DoPausedRecordComplete()
sl@0
   380
	{
sl@0
   381
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoPausedRecordComplete - Enter"));
sl@0
   382
    ASSERT(iEmptyBuffer);
sl@0
   383
	iEmptyBuffer->SetLastBuffer(ETrue);
sl@0
   384
	iDevSoundObserver.BufferToBeEmptied(iEmptyBuffer);
sl@0
   385
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoPausedRecordComplete - Exit"));
sl@0
   386
	}
sl@0
   387
sl@0
   388
// ----------------------------------------------------------------------------
sl@0
   389
// CMsgQueueHandler::AssignDataBufferToChunkL
sl@0
   390
// Updates chunk handle.
sl@0
   391
// ----------------------------------------------------------------------------
sl@0
   392
//
sl@0
   393
void CMsgQueueHandler::AssignDataBufferToChunkL(TInt aHandle)
sl@0
   394
	{
sl@0
   395
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::AssignDataBufferToChunkL - Enter"));
sl@0
   396
    if ( iChunk.Handle() )
sl@0
   397
		{
sl@0
   398
		iChunk.Close();
sl@0
   399
		}
sl@0
   400
	User::LeaveIfError(iChunk.SetReturnedHandle(aHandle));
sl@0
   401
	// Adjust ptr to map only requested size
sl@0
   402
	// The existing clients should handle TPtr with length zero and max length
sl@0
   403
	// iSetPckg().iBufferSize.
sl@0
   404
	// When we make sure every client handles it, replace second parameter with
sl@0
   405
	// zero.
sl@0
   406
	//iChunkDataPtr.Set(iChunk.Base(), 0, iSetPckg().iBufferSize);
sl@0
   407
	iChunkDataPtr.Set(iChunk.Base(), iSetPckg().iBufferSize, iSetPckg().iBufferSize);
sl@0
   408
	if (!iDataBuffer)
sl@0
   409
		{
sl@0
   410
		iDataBuffer = CMMFPtrBuffer::NewL();	
sl@0
   411
		}
sl@0
   412
	UpdateDataBufferL();
sl@0
   413
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::AssignDataBufferToChunkL - Exit"));
sl@0
   414
	}
sl@0
   415
	
sl@0
   416
void CMsgQueueHandler::UpdateDataBufferL()
sl@0
   417
	{
sl@0
   418
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::UpdateDataBufferL - Enter"));
sl@0
   419
    ASSERT(iDataBuffer); // to get here, we should have a data buffer
sl@0
   420
	iDataBuffer->SetPtr(iChunkDataPtr);
sl@0
   421
	iDataBuffer->SetRequestSizeL(iSetPckg().iRequestSize);
sl@0
   422
	iDataBuffer->SetLastBuffer(EFalse);
sl@0
   423
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::UpdateDataBufferL - Exit"));
sl@0
   424
	}
sl@0
   425
	
sl@0
   426
void CMsgQueueHandler::Finish()
sl@0
   427
	{
sl@0
   428
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::Finish - Enter"));
sl@0
   429
    if (iDataBuffer)
sl@0
   430
		{
sl@0
   431
		delete iDataBuffer;
sl@0
   432
		iDataBuffer = NULL;
sl@0
   433
		}
sl@0
   434
	if (iChunk.Handle())
sl@0
   435
		{
sl@0
   436
		iChunk.Close();
sl@0
   437
		}
sl@0
   438
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::Finish - Exit"));
sl@0
   439
	}
sl@0
   440
sl@0
   441
// 	AsyncQueueStartCallback
sl@0
   442
sl@0
   443
sl@0
   444
TInt CMsgQueueHandler::AsyncQueueFinishCallback(TAny* aPtr)
sl@0
   445
	{
sl@0
   446
    CMsgQueueHandler* self = static_cast<CMsgQueueHandler*>(aPtr);
sl@0
   447
	self->DoAsyncQueueFinishCallback();
sl@0
   448
	return KErrNone;
sl@0
   449
	}
sl@0
   450
	
sl@0
   451
void CMsgQueueHandler::DoAsyncQueueFinishCallback()
sl@0
   452
	{
sl@0
   453
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoAsyncQueueFinishCallback - Enter"));
sl@0
   454
    Finish();
sl@0
   455
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoAsyncQueueFinishCallback - Exit"));
sl@0
   456
	}
sl@0
   457
sl@0
   458
sl@0
   459
// End of File