diff -r 000000000000 -r c8caa15ef882 simpleengine/engine/src/simpleclient.cpp --- /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 +#include + +// 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 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 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 ); + }