diff -r 0aa8cc770c8a -r 4a793f564d72 localconnectivityservice/locod/src/locodservice.cpp --- a/localconnectivityservice/locod/src/locodservice.cpp Tue Aug 31 16:03:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,220 +0,0 @@ -/* -* 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: The implementation of LCD service -* -*/ - - -#include - -#include "locodservice.h" -#include "debug.h" - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// Creates a service object based on the service plug in objects -// --------------------------------------------------------------------------- -// -CLocodService* CLocodService::NewL(CLocodServicePlugin& aPlugin) - { - CLocodService* self = new (ELeave) CLocodService(aPlugin); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -// --------------------------------------------------------------------------- -// C++ destructor -// --------------------------------------------------------------------------- -// -CLocodService::~CLocodService() - { - delete iPlugin; - iRequests.Close(); - TRACE_FUNC - } - -// --------------------------------------------------------------------------- -// return the plugin instance -// --------------------------------------------------------------------------- -// -CLocodServicePlugin& CLocodService::Plugin() - { - return *iPlugin; - } - - -// --------------------------------------------------------------------------- -// A request is sent to service plug in to manage their services -// --------------------------------------------------------------------------- -// -TInt CLocodService::ManageService(TLocodBearer aBearer, TBool aStatus) - { - TRACE_INFO((_L("[Srvc %d] [SrvcState 0x%04x]"), iPlugin->ImplementationUid().iUid, iServiceStatus)) - - // if there is an outstanding request which has the same bearer, - // remove all later enqueued request, and - // enqueue this request if the bearer status is different from the ongoing one. - TInt count = iRequests.Count(); - for (TInt i = 0; i < count; i++) - { - if (iRequests[i].iBearer == aBearer && iRequests[i].iRequesting) - { - for (TInt j = count - 1; j > i; j--) - { - if (iRequests[j].iBearer == aBearer) - { - TRACE_INFO((_L("[Srvc %d] [ManSrvc] Remove buffered request(Bearer 0x%04x status %d)"), - iPlugin->ImplementationUid().iUid, aBearer, iRequests[j].iStatus)) - iRequests.Remove(j); - } - } - if ((!iRequests[i].iStatus && aStatus) || (iRequests[i].iStatus && !aStatus)) - { - TRACE_INFO((_L("[Srvc %d] [ManSrvc] Buffer request(Bearer 0x%04x status %d)"), - iPlugin->ImplementationUid().iUid, aBearer, aStatus)) - return iRequests.Append(TLocodServiceRequest(aBearer, aStatus)); - } - else - { - TRACE_INFO((_L("[Srvc %d] [ManSrvc] Request(Bearer 0x%04x status %d) discarded"), - iPlugin->ImplementationUid().iUid, aBearer, aStatus)) - return KErrNone; - } - } - } - - // else if the latest bearer status in this service plugin is different, - // Start ManageService() - if ( aStatus && !(iServiceStatus & aBearer) || - !aStatus && (iServiceStatus & aBearer)) - { - TLocodServiceRequest request(aBearer, aStatus); - request.iRequesting = ETrue; - TInt err = iRequests.Append(request); - TRACE_INFO((_L("[Srvc %d] [ManSrvc] Issue request(Bearer 0x%04x status %d)"), - iPlugin->ImplementationUid().iUid, aBearer, aStatus)) - if (!err) - { - iPlugin->ManageService(aBearer, aStatus); - } - return err; - } - - // else the latest bearer status in this service plugin is the same, - // do nothing - TRACE_INFO((_L("[Srvc %d] [ManSrvc] Request(Bearer 0x%04x status %d) discarded"), - iPlugin->ImplementationUid().iUid, aBearer, aStatus)) - return KErrNone; - } - -// --------------------------------------------------------------------------- -// Based on the status of bearer either the request is removed or a new manage -// service is issued -// --------------------------------------------------------------------------- -// -void CLocodService::ManageServiceCompleted(TLocodBearer aBearer, - TBool aStatus, TInt err) - { - TRACE_INFO((_L("[Srvc %d] [ManSrvc complete] (Bearer 0x%04x status %d) return %d"), - iPlugin->ImplementationUid().iUid, aBearer, aStatus, err)) - // Save the latest status of this bearer - if (!err) - { - if (aStatus) - { - iServiceStatus |= aBearer; - } - else - { - iServiceStatus &= (~aBearer); - } - TRACE_INFO((_L("[Srvc %d] [SrvcState 0x%04x]"), iPlugin->ImplementationUid().iUid, iServiceStatus)) - } - - // Find the completed request and remove it from the request list. - TInt count = iRequests.Count(); - for (TInt i = 0; i < count; i++) - { - if (iRequests[i].iBearer == aBearer && iRequests[i].iRequesting) - { - TRACE_INFO((_L("[Srvc %d] [ManSrvc completed] Remove completed request(Bearer 0x%04x status %d)"), - iPlugin->ImplementationUid().iUid, aBearer, iRequests[i].iStatus)) - iRequests.Remove(i); - break; - } - } - - // Find the next request and start ManageService if the status is changed. - count = iRequests.Count(); - for (TInt i = 0; i < count; i++) - { - if (iRequests[i].iBearer == aBearer) - { - if ( (iRequests[i].iStatus && !(iServiceStatus & aBearer)) || - (!iRequests[i].iStatus && (iServiceStatus & aBearer))) - { - iRequests[i].iRequesting = ETrue; - TRACE_INFO((_L("[Srvc %d] [ManSrvc completed] Issue buffered request(Bearer 0x%04x status %d)"), - iPlugin->ImplementationUid().iUid, aBearer, iRequests[i].iStatus)) - iPlugin->ManageService(iRequests[i].iBearer, iRequests[i].iStatus); - } - else - { - TRACE_INFO((_L("[Srvc %d] [ManSrvc completed] Remove buffered request(Bearer 0x%04x status %d)"), - iPlugin->ImplementationUid().iUid, aBearer, iRequests[i].iStatus)) - iRequests.Remove(i); - } - break; - } - } - } - -// --------------------------------------------------------------------------- -// return if there are request pending -// --------------------------------------------------------------------------- -// -TBool CLocodService::HasServiceToManage() const - { - return iRequests.Count(); - } - -// --------------------------------------------------------------------------- -// C++ default constructor -// --------------------------------------------------------------------------- -// -CLocodService::CLocodService(CLocodServicePlugin& aPlugin) : iPlugin(&aPlugin) - { - TRACE_FUNC_THIS - } - -// --------------------------------------------------------------------------- -// C++ 2nd phase construction -// --------------------------------------------------------------------------- -// -void CLocodService::ConstructL() - { - } - -// --------------------------------------------------------------------------- -// C++ default constructor -// --------------------------------------------------------------------------- -// -TLocodServiceRequest::TLocodServiceRequest(TLocodBearer aBearer, TBool aStatus) -: iBearer(aBearer), iStatus(aStatus), iRequesting(EFalse) - { - } -