simpleengine/engine/src/simpleenginerequest.cpp
changeset 0 c8caa15ef882
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/simpleengine/engine/src/simpleenginerequest.cpp	Tue Feb 02 01:05:17 2010 +0200
@@ -0,0 +1,476 @@
+/*
+* Copyright (c) 2006 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:    Simple Engine request
+*
+*/
+
+
+
+
+// INCLUDE FILES
+
+#include <e32std.h>
+
+// own simple
+#include "simplesipconnection.h"
+#include "simplecommon.h"
+#include "simpleenginerequest.h"
+#include "msimpleenginerequest.h"
+#include "msimpleowncallback.h"
+
+#ifdef _DEBUG
+#include "simpledebugutils.h"
+#endif
+
+
+// ================= MEMBER FUNCTIONS =======================
+//
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::CSimpleEngineRequest
+// ----------------------------------------------------------
+//
+CSimpleEngineRequest::CSimpleEngineRequest(
+    MSimpleOwnCallback& aEngine,
+    MSimpleEngineRequest::TSimpleRequest aType,
+    TInt aOpId )
+: CActive( CActive::EPriorityHigh ), iType( aType ),
+  iOpId( aOpId ), iEngine( aEngine ), iRefresh( ETrue ),
+  iAux(0), iDestroyedPtr( NULL )
+    {
+    CActiveScheduler::Add(this);
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::~CSimpleEngineRequest
+// ----------------------------------------------------------
+//
+CSimpleEngineRequest::~CSimpleEngineRequest()
+    {
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("EngineRequest: destructor ereq=%d" ), (TInt)this);
+#endif
+
+    if ( iDestroyedPtr )
+        {
+        // We are called inside callback
+        *iDestroyedPtr = ETrue;
+        iDestroyedPtr = NULL;
+        }
+        
+    Cancel();
+    delete iResponseData;   
+    delete iRemoteURI;
+    delete iRequestContentType;
+    delete iResponseContentType;
+    delete iResponseBoundary;
+    delete iResponseStart;
+    delete iETag;
+    delete iRecipientId;
+    }
+
+// -----------------------------------------------------------------------------
+// CSimpleEngineRequest::Destroy
+// -----------------------------------------------------------------------------
+void CSimpleEngineRequest::Destroy()
+    {
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("EngineRequest: Destroy ereq=%d" ), (TInt)this);
+#endif
+    iLink.Deque();
+    delete this;
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::NewL
+// ----------------------------------------------------------
+//
+CSimpleEngineRequest* CSimpleEngineRequest::NewL(
+    MSimpleOwnCallback& aEngine,
+    TSimpleRequest aType,
+    TInt aOpId )
+    {
+    CSimpleEngineRequest* self = new (ELeave) CSimpleEngineRequest( aEngine, aType, aOpId );
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("EngineRequest: NewL ereq=%d" ), (TInt)self);
+#endif
+    return self;
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::SetRequestData
+// ----------------------------------------------------------
+//
+void CSimpleEngineRequest::SetRequestData( TPtrC8 aData )
+    {
+    iRequestData.Set(aData);
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::SetRefreshTime
+// ----------------------------------------------------------
+//
+void CSimpleEngineRequest::SetRefreshTime( TUint aTime )
+    {
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("EngineRequest: SetRefreshTime %d" ), aTime);
+#endif
+    iRefreshTime = aTime;
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::SetRemoteURIL
+// ----------------------------------------------------------
+//
+void CSimpleEngineRequest::SetRemoteURIL( const TDesC8& aURI )
+    {
+    delete iRemoteURI;
+    iRemoteURI = NULL;
+    iRemoteURI = aURI.AllocL();
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::RequestType
+// ----------------------------------------------------------
+//
+MSimpleEngineRequest::TSimpleRequest CSimpleEngineRequest::RequestType()
+    {
+    return iType;
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::ModifyType
+// ----------------------------------------------------------
+//
+void CSimpleEngineRequest::ModifyType( MSimpleEngineRequest::TSimpleRequest aType )
+    {
+    iType = aType;
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::Complete
+// ----------------------------------------------------------
+//
+void CSimpleEngineRequest::Complete( TInt aStatus )
+    {
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("EngineRequest: COMPLETE ereq=%d aStatus=%d" ),
+        (TInt)this, aStatus );
+#endif
+   // Yield to scheduler in order to "break" a call stack before
+   // continuing response handling.
+
+    // RunL will handle the response further
+    iStatus = KRequestPending;
+    SetActive();
+    TRequestStatus* s = &iStatus;
+    User::RequestComplete( s, aStatus );
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::RequestContentType
+// ----------------------------------------------------------
+//
+TPtrC8 CSimpleEngineRequest::RequestContentType()
+    {
+    return iRequestContentType ? iRequestContentType->Des() : TPtrC8();
+    }
+    
+// ----------------------------------------------------------
+// CSimpleEngineRequest::SetRequestContentTypeL
+// ----------------------------------------------------------
+//
+void CSimpleEngineRequest::SetRequestContentTypeL( const TDesC8& aData )
+    {
+    delete iRequestContentType;
+    iRequestContentType = NULL;
+    iRequestContentType = aData.AllocL(); 
+    }    
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::RequestData
+// ----------------------------------------------------------
+//
+TPtrC8 CSimpleEngineRequest::RequestData()
+    {
+    return iRequestData;
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::SetResponseContentType(
+// ----------------------------------------------------------
+//
+void CSimpleEngineRequest::SetResponseContentType( HBufC8* aData )
+    {
+    delete iResponseContentType;
+    iResponseContentType = NULL;
+    iResponseContentType = aData;
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::SetResponseContentType(
+// ----------------------------------------------------------
+//
+void CSimpleEngineRequest::SetResponseBoundaryL( const TDesC8& aData )
+    {
+    delete iResponseBoundary;
+    iResponseBoundary = NULL;
+    iResponseBoundary = aData.AllocL();
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::SetResponseContentType(
+// ----------------------------------------------------------
+//
+void CSimpleEngineRequest::SetResponseStartL( const TDesC8& aData )
+    {
+    delete iResponseStart;
+    iResponseStart = NULL;
+    iResponseStart = aData.AllocL();
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::SetResponseDataL
+// ----------------------------------------------------------
+//
+void CSimpleEngineRequest::SetResponseDataL( const TDesC8& aData )
+    {
+    delete iResponseData;
+    iResponseData = NULL;
+    iResponseData = aData.AllocL();
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::SetRecipientL
+// ----------------------------------------------------------
+//
+void CSimpleEngineRequest::SetRecipientL( const TDesC8& aRecipientId )
+    {
+    delete iRecipientId;
+    iRecipientId = NULL;
+    iRecipientId = aRecipientId.AllocL();
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::SetResponseMethod
+// ----------------------------------------------------------
+//
+void CSimpleEngineRequest::SetResponseMethod( TSimpleSIPResponse aMethod )
+    {
+    iResponseMethod = aMethod;
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::ResponseMethod
+// ----------------------------------------------------------
+//
+MSimpleEngineRequest::TSimpleSIPResponse CSimpleEngineRequest::ResponseMethod( )
+    {
+    return iResponseMethod;
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::ResponseContentType
+// ----------------------------------------------------------
+//
+TPtrC8 CSimpleEngineRequest::ResponseContentType()
+    {
+    return iResponseContentType ? iResponseContentType->Des() : TPtrC8();
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::ResponseBoundary
+// ----------------------------------------------------------
+//
+TPtrC8 CSimpleEngineRequest::ResponseBoundary()
+    {
+    return iResponseBoundary? iResponseBoundary->Des() : TPtrC8();
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::ResponseStart
+// ----------------------------------------------------------
+//
+TPtrC8 CSimpleEngineRequest::ResponseStart()
+    {
+    return iResponseStart ? iResponseStart->Des() : TPtrC8();
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::ResponseData
+// ----------------------------------------------------------
+//
+TPtrC8 CSimpleEngineRequest::ResponseData()
+    {
+    return iResponseData ? iResponseData->Des() : TPtrC8();
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::Recipient
+// ----------------------------------------------------------
+//
+TPtrC8 CSimpleEngineRequest::Recipient()
+    {
+    return iRecipientId ? iRecipientId->Des() : TPtrC8();
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::RefreshTime
+// ----------------------------------------------------------
+//
+TUint CSimpleEngineRequest::RefreshTime()
+    {
+    return iRefreshTime;
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::RemoteURI
+// ----------------------------------------------------------
+//
+TPtrC8 CSimpleEngineRequest::RemoteURI()
+    {
+    return iRemoteURI ? iRemoteURI->Des() : TPtrC8();
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::IsRefresh
+// ----------------------------------------------------------
+//
+TBool CSimpleEngineRequest::IsRefresh()
+    {
+    return iRefresh;
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::SetRefresh
+// ----------------------------------------------------------
+//
+void CSimpleEngineRequest::SetRefresh( TBool aRefresh )
+    {
+    iRefresh = aRefresh;
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::OpId
+// ----------------------------------------------------------
+//
+TInt CSimpleEngineRequest::OpId( )
+    {
+    return iOpId;
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::Aux
+// ----------------------------------------------------------
+//
+TInt CSimpleEngineRequest::Aux( )
+    {
+    return iAux;
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::SetAux
+// ----------------------------------------------------------
+//
+void CSimpleEngineRequest::SetAux( TInt aData )
+    {
+    iAux = aData;
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::SetResponseReason
+// ----------------------------------------------------------
+void CSimpleEngineRequest::SetResponseReason( TSimpleResponseReason aReason )
+    {
+    iReason = aReason;
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::ResponseReason
+// ----------------------------------------------------------
+MSimpleEngineRequest::TSimpleResponseReason CSimpleEngineRequest::ResponseReason()
+    {
+    return iReason;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSimpleEngineRequest::SetETagL
+// -----------------------------------------------------------------------------
+void CSimpleEngineRequest::SetETagL( const TDesC8& aTag )
+    {
+    delete iETag;
+    iETag = NULL;
+    iETag = aTag.AllocL();
+    }
+
+// -----------------------------------------------------------------------------
+// CSimpleEngineRequest::ETag
+// -----------------------------------------------------------------------------
+TPtrC8 CSimpleEngineRequest::ETag()
+    {
+    return iETag ? iETag->Des() : TPtrC8();    
+    }
+
+// -----------------------------------------------------------------------------
+// CSimpleEngineRequest::RunL
+// -----------------------------------------------------------------------------
+//
+void CSimpleEngineRequest::RunL()
+    {
+    TInt stat = iStatus.Int();
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("EngineRequest: RunL type=%d status=%d ereq=%d"),iType,stat, (TInt)this );
+#endif
+
+    // Set the member to point to stack variable
+    TBool   destroyed( EFalse );
+    iDestroyedPtr = &destroyed;
+
+    // Call client callback method(s)
+    iEngine.Complete( iOpId, stat, *this );
+    
+    // Check whether this entity is destroyed in Complete method.
+    if ( destroyed )
+        {
+        return;
+        }
+                    
+    // Reset response data
+    delete iResponseData;
+    iResponseData = NULL;
+    delete iResponseContentType;
+    iResponseContentType = NULL;
+    delete iResponseBoundary;
+    iResponseBoundary = NULL;
+    delete iResponseStart;
+    iResponseStart = NULL;
+    delete iRecipientId;
+    iRecipientId = NULL;
+    iResponseMethod = EUnknownResponse;
+    iReason = ENoReason;    
+    
+    iDestroyedPtr = NULL;    
+    }
+
+// ----------------------------------------------------------
+// CSimpleEngineRequest::DoCancel
+// ----------------------------------------------------------
+//
+void CSimpleEngineRequest::DoCancel()
+    {
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("EngineRequest: DoCancel ereq=%d" ), (TInt)this );
+#endif
+    }
+