simpleengine/engine/src/simpleclient.cpp
changeset 0 c8caa15ef882
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/simpleengine/engine/src/simpleclient.cpp	Tue Feb 02 01:05:17 2010 +0200
@@ -0,0 +1,219 @@
+/*
+* 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
+*
+*/
+
+
+
+
+// INCLUDE FILES
+
+#include <e32std.h>
+#include <s32mem.h>
+
+// own simple
+#include "msimpleconnection.h"
+#include "simpleconnection.h"
+#include "simplecommon.h"
+#include "simpleenginerequest.h"
+#include "simplesipconnection.h"
+#include "simpleengineutils.h"
+#include "simpleclient.h"
+#include "simpleerrors.h"
+
+#ifdef _DEBUG
+#include "simpledebugutils.h"
+#endif
+
+// ================= MEMBER FUNCTIONS =======================
+//
+
+// ----------------------------------------------------------
+// CSimpleClient::CSimpleClient
+// ----------------------------------------------------------
+//
+CSimpleClient::CSimpleClient(
+    MSimpleConnection& aConn )
+: iConn( aConn ),
+  iOpId(0),
+  iSipStatus(0),
+  iRetryAfterTime(0),
+  iRequestList( CSimpleEngineRequest::LinkOffset()), 
+  iRequest( MSimpleEngineRequest::ENone ),
+  iDestroyedPtr( NULL )
+    {
+    }
+
+// ----------------------------------------------------------
+// CSimpleClient::~CSimpleClient
+// ----------------------------------------------------------
+//
+CSimpleClient::~CSimpleClient()
+    {
+    DeleteRequests();
+    
+    if ( iDestroyedPtr )
+        {
+        // We are called inside callback
+        *iDestroyedPtr = ETrue;
+        iDestroyedPtr = NULL;
+        }
+    
+    }
+
+// ----------------------------------------------------------
+// CSimpleClient::BaseConstructL
+// ----------------------------------------------------------
+//
+void CSimpleClient::BaseConstructL()
+    {
+    iLimitLowerValue = TSimpleEngineUtils::OpIdRange();
+    iLimitUpperValue = iLimitLowerValue + KRangeSize;
+    iOpId = iLimitLowerValue;
+    }
+
+// ----------------------------------------------------------------------------
+// CSimpleClient::IncreaseOpId
+// ----------------------------------------------------------------------------
+void CSimpleClient::IncreaseOpId( )
+    {
+    iOpId++;
+    if( iOpId >= iLimitUpperValue )
+        {
+        iOpId = iLimitLowerValue;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSimpleClient::DeleteRequests
+// -----------------------------------------------------------------------------
+void CSimpleClient::DeleteRequests()
+    {
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("SimpleClient: DeleteRequests this=%d" ), (TInt)this );
+#endif
+    // Delete all buffered transaction requests
+    TDblQueIter<CSimpleEngineRequest> rIter( iRequestList );
+    rIter.SetToFirst();
+
+    while ( rIter )
+        {
+        CSimpleEngineRequest* req = rIter;
+        rIter++; //lint !e1757
+        // delete corresponding request from another DLL too.
+        req->ModifyType( MSimpleEngineRequest::EDestroy );
+        TRAP_IGNORE( SendReqL( *req ) );
+        // delete request from this DLL.
+        req->Destroy();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSimpleClient::SearchRequests
+// -----------------------------------------------------------------------------
+CSimpleEngineRequest* CSimpleClient::SearchRequests( TInt aOpId )
+    {
+#ifdef _DEBUG
+    TSimpleLogger::Log(_L("SimpleClient: SearchRequests this=%d" ), (TInt)this );
+#endif
+    // Delete all buffered transaction requests
+    TDblQueIter<CSimpleEngineRequest> rIter( iRequestList );
+    rIter.SetToFirst();
+
+    while ( rIter )
+        {
+        CSimpleEngineRequest* req = rIter;
+        rIter++; //lint !e1757
+        if ( req->OpId() == aOpId )
+            {
+            return req;
+            }
+        }
+    return (CSimpleEngineRequest*)NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CSimpleClient::SendReqL
+// -----------------------------------------------------------------------------
+void CSimpleClient::SendReqL( MSimpleEngineRequest& aReq )
+    {
+    CSimpleConnection* conn = STATIC_CAST( CSimpleConnection*, &iConn); //lint !e826
+    CSimpleSipConnection* engine = conn->Connection();
+    engine->DispatchReqL( aReq );
+    }
+
+// ----------------------------------------------------------
+// CSimpleClient::ResponseReason
+// ----------------------------------------------------------
+//
+TInt CSimpleClient::ResponseReason(
+    MSimpleEngineRequest& aR )
+    {
+    switch ( aR.ResponseReason() )
+        {
+        case MSimpleEngineRequest::ENoReason:
+            return KErrNone;
+
+        case MSimpleEngineRequest::ERejected:
+            return KSimpleErrRejected;
+
+        case MSimpleEngineRequest::ETimeout:
+            return KSimpleErrTimeout;
+
+        case MSimpleEngineRequest::EDeactivated:
+            return KSimpleErrDeactivated;
+
+        case MSimpleEngineRequest::EProbation:
+            return KSimpleErrProbation;
+
+        case MSimpleEngineRequest::ENoresource:
+            return KSimpleErrNoresource;
+
+        case MSimpleEngineRequest::EGiveup:
+            return KSimpleErrGiveup;
+
+        default:
+            return KErrNone;
+        }; //lint !e960
+    }
+    
+// ----------------------------------------------------------
+// CSimpleClient::DoSIPStatus
+// ----------------------------------------------------------
+//
+TUint CSimpleClient::DoSIPStatus( )
+    {
+    return iSipStatus;    
+    }
+    
+// ----------------------------------------------------------
+// CSimpleClient::DoRetryAfter
+// ----------------------------------------------------------
+//
+TUint CSimpleClient::DoRetryAfter( )
+    {
+    return iRetryAfterTime;
+    }    
+    
+// ----------------------------------------------------------
+// CSimpleClient::GetSIPStatus
+// ----------------------------------------------------------
+//
+void CSimpleClient::GetSIPStatus( TInt aOpId )
+    {    
+    CSimpleConnection* conn = STATIC_CAST( CSimpleConnection*, &iConn); //lint !e826
+    CSimpleSipConnection* engine = conn->Connection();
+    iSipStatus = engine->SIPStatus( aOpId, iRetryAfterTime );
+    }