diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/ClientResolver/Server/src/sipcrworkerao.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/ClientResolver/Server/src/sipcrworkerao.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,250 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Name : sipcrworkerao.cpp +// Part of : SIP / SIP Client Resolver +// Version : %version: 2.1.1 % +// + + + +#include "sipcrworkerao.h" +#include "CSipCRServerSession.h" + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::NewL +// ---------------------------------------------------------------------------- +// +CSipCrWorkerAo* CSipCrWorkerAo::NewL(CSIPCRServerSession& aSession) + { + CSipCrWorkerAo* self = CSipCrWorkerAo::NewLC(aSession); + CleanupStack::Pop(self); + return self; + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::NewLC +// ---------------------------------------------------------------------------- +// +CSipCrWorkerAo* CSipCrWorkerAo::NewLC(CSIPCRServerSession& aSession) + { + CSipCrWorkerAo* self = new(ELeave)CSipCrWorkerAo(aSession); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::NewL +// ---------------------------------------------------------------------------- +// +CSipCrWorkerAo* CSipCrWorkerAo::NewL( + TUint32 aRequestId, + CBufBase* aSerializedSipRequest, + HBufC8* aSipRequestBody, + const TSipClient& aSipClient, + const TUid& aResolverUid, + CSIPCRServerSession& aSession) + { + CSipCrWorkerAo* self = + CSipCrWorkerAo::NewLC( + aRequestId,aSerializedSipRequest,aSipRequestBody, + aSipClient,aResolverUid,aSession); + CleanupStack::Pop(self); + return self; + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::NewLC +// ---------------------------------------------------------------------------- +// +CSipCrWorkerAo* CSipCrWorkerAo::NewLC( + TUint32 aRequestId, + CBufBase* aSerializedSipRequest, + HBufC8* aSipRequestBody, + const TSipClient& aSipClient, + const TUid& aResolverUid, + CSIPCRServerSession& aSession) + { + CSipCrWorkerAo* self = + new(ELeave)CSipCrWorkerAo( + aRequestId,aSipClient,aResolverUid,aSession); + CleanupStack::PushL(self); + self->ConstructL(aSerializedSipRequest,aSipRequestBody); + return self; + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::CSipCrWorkerAo +// ---------------------------------------------------------------------------- +// +CSipCrWorkerAo::CSipCrWorkerAo(CSIPCRServerSession& aSession) + : CActive(EPriorityStandard), + iSession(aSession), + iSipClient(TUid::Null(),EFalse,EFalse) + { + CActiveScheduler::Add(this); + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::CSipCrWorkerAo +// ---------------------------------------------------------------------------- +// +CSipCrWorkerAo::CSipCrWorkerAo( + TUint32 aRequestId, + const TSipClient& aSipClient, + const TUid& aResolverUid, + CSIPCRServerSession& aSession) + : CActive(EPriorityStandard), + iSession(aSession), + iRequestId(aRequestId), + iSipClient(aSipClient), + iResolverUid(aResolverUid) + { + CActiveScheduler::Add(this); + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::ConstructL +// ---------------------------------------------------------------------------- +// +void CSipCrWorkerAo::ConstructL() + { + iSerializedSipRequest = CBufFlat::NewL(1); + iSipRequestBody = KNullDesC8().AllocL(); + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::ConstructL +// ---------------------------------------------------------------------------- +// +void CSipCrWorkerAo::ConstructL( + CBufBase* aSerializedSipRequest, + HBufC8* aSipRequestBody) + { + __ASSERT_ALWAYS(aSerializedSipRequest != NULL, User::Leave(KErrArgument)); + iSerializedSipRequest = aSerializedSipRequest; + iSipRequestBody = aSipRequestBody; + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::~CSipCrWorkerAo +// ---------------------------------------------------------------------------- +// +CSipCrWorkerAo::~CSipCrWorkerAo() + { + CActive::Cancel(); + iThread.Close(); + delete iSerializedSipRequest; + delete iSipRequestBody; + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::StartThreadL +// ---------------------------------------------------------------------------- +// +void CSipCrWorkerAo::StartThreadL(RThread& aThread) + { + User::LeaveIfError(iThread.Duplicate(aThread)); + aThread.Logon(iStatus); + aThread.Resume(); + SetActive(); + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::Session +// ---------------------------------------------------------------------------- +// +CSIPCRServerSession& CSipCrWorkerAo::Session() + { + return iSession; + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::SerializedSipRequest +// ---------------------------------------------------------------------------- +// +CBufBase& CSipCrWorkerAo::SerializedSipRequest() + { + return *iSerializedSipRequest; + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::GetSipRequestBody +// ---------------------------------------------------------------------------- +// +HBufC8* CSipCrWorkerAo::GetSipRequestBody() + { + HBufC8* tmp = iSipRequestBody; + iSipRequestBody = NULL; + return tmp; + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::SipClient +// ---------------------------------------------------------------------------- +// +TSipClient& CSipCrWorkerAo::SipClient() + { + return iSipClient; + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::ResolverUid +// ---------------------------------------------------------------------------- +// +const TUid& CSipCrWorkerAo::ResolverUid() const + { + return iResolverUid; + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::RequestId +// ---------------------------------------------------------------------------- +// +TUint32 CSipCrWorkerAo::RequestId() const + { + return iRequestId; + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::CompletionCode +// ---------------------------------------------------------------------------- +// +TInt CSipCrWorkerAo::CompletionCode() const + { + TExitType exitType = iThread.ExitType(); + if (exitType == EExitPanic) + { + return KErrGeneral; + } + return iStatus.Int(); + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::RunL +// ---------------------------------------------------------------------------- +// +void CSipCrWorkerAo::RunL() + { + iSession.WorkerAoRequestCompleted(this); // Note: deletes this + } + +// ---------------------------------------------------------------------------- +// CSipCrWorkerAo::DoCancel +// ---------------------------------------------------------------------------- +// +void CSipCrWorkerAo::DoCancel() + { + iThread.LogonCancel(iStatus); + }