realtimenetprots/sipfw/ClientResolver/Server/src/sipcrworkerao.cpp
changeset 0 307788aac0a8
--- /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);
+    }