diff -r 000000000000 -r 9cfd9a3ee49c networkprotocolmodules/privacyprotocolmodule/ClientAPI/PrivacyRequestAPI/src/lbsprivacyrequestimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networkprotocolmodules/privacyprotocolmodule/ClientAPI/PrivacyRequestAPI/src/lbsprivacyrequestimpl.cpp Tue Feb 02 01:50:39 2010 +0200 @@ -0,0 +1,549 @@ + //lbsprivacyrequestimpl.cpp + +// 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: +// + +#include "lbsprivacyrequestimpl.h" +#include "lbsprivacyrequestresponsehandler.h" +#include + + +/* +* Default constructor. +*/ +CLbsPrivacyRequestImpl::CLbsPrivacyRequestImpl(MLbsPrivacyRequestObserver& aObserver) + :iObserver(aObserver) + { + + } + +/** + * Standard ConstructL + */ +void CLbsPrivacyRequestImpl::ConstructL() + { + User::LeaveIfError(iServer.Connect(ELbsProxyApiTypeLocal)); + } + +/** + * Standard Symbian OS two-phase constructor. + * @return A new instance of this class. + */ +CLbsPrivacyRequestImpl* CLbsPrivacyRequestImpl::NewL(MLbsPrivacyRequestObserver& aObserver) + { + CLbsPrivacyRequestImpl* self = new (ELeave) CLbsPrivacyRequestImpl(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +/** +* Destructor +*/ +CLbsPrivacyRequestImpl::~CLbsPrivacyRequestImpl() + { + iResponseHandler.ResetAndDestroy(); + iServer.Close(); + } + +TInt CLbsPrivacyRequestImpl::NewPrivacyRequest(TLbsPrivacyRequestId& aRequestId, /*out*/ + const TLbsPrivacyRequest& aPrivacy,/*in*/ + const TLbsExternalRequestInfo& aRequestInfo/*in*/) + { + TInt validation = ValidateNewPrivReqArguments(aPrivacy, aRequestInfo); + if(KErrNone != validation) + { + return validation; + } + + TLbsNetPosRequestPrivacy netPosRequestPrivacy; + netPosRequestPrivacy.SetRequestAction(static_cast(aPrivacy.RequestAction())); + netPosRequestPrivacy.SetRequestAdvice(static_cast(aPrivacy.RequestAdvice())); + + CPrivacyRequestResponseHandler* newResponseHandler = NULL; + TRAPD(err, newResponseHandler = CPrivacyRequestResponseHandler::NewLC(*this, iServer, iObserver); + iResponseHandler.AppendL(newResponseHandler); + CleanupStack::Pop(newResponseHandler); + ); + newResponseHandler->NewPrivacyRequest(aRequestId, aRequestInfo, netPosRequestPrivacy); + return err; + } + +TInt CLbsPrivacyRequestImpl::RepeatPrivacyRequest(const TLbsPrivacyRequestId aRequestId, /*in*/ + const TLbsPrivacyRequest& aPrivacy,/*in*/ + const TLbsExternalRequestInfo& aRequestInfo/*in*/) + { + TInt validation = ValidateRepeatPrivReqArguments(aRequestId, aPrivacy, aRequestInfo); + if(KErrNone != validation) + { + return validation; + } + + TLbsNetPosRequestPrivacy netPosRequestPrivacy; + netPosRequestPrivacy.SetRequestAction(static_cast(aPrivacy.RequestAction())); + netPosRequestPrivacy.SetRequestAdvice(static_cast(aPrivacy.RequestAdvice())); + + CPrivacyRequestResponseHandler* newResponseHandler = NULL; + TRAPD(err, newResponseHandler = CPrivacyRequestResponseHandler::NewLC(*this, iServer, iObserver); + iResponseHandler.AppendL(newResponseHandler); + CleanupStack::Pop(newResponseHandler); + ); + newResponseHandler->RepeatPrivacyRequest(aRequestId, aRequestInfo, netPosRequestPrivacy); + + return err; + } + +TInt CLbsPrivacyRequestImpl::CompleteRequest(TLbsPrivacyRequestId aRequestId/*in*/, + TInt aReason/*in*/) + { + return iServer.CompleteRequest(aRequestId, aReason); + } + +TInt CLbsPrivacyRequestImpl::ValidateNewPrivReqArguments(const TLbsPrivacyRequest& aPrivacy, const TLbsExternalRequestInfo& aRequestInfo) + { + TLbsPrivacyRequest::TLbsRequestAdvice requestAdvice(aPrivacy.RequestAdvice()); + switch(requestAdvice) + { + case TLbsPrivacyRequest::ERequestAdviceNotify: + case TLbsPrivacyRequest::ERequestAdviceVerify: + case TLbsPrivacyRequest::ERequestAdviceSilent: + break; // do nothing for good value(s) + case TLbsPrivacyRequest::ERequestAdviceNotUsed: + { + return KErrArgument; + } + case TLbsPrivacyRequest::ERequestAdviceStealth: + + { + return KErrNotSupported; + } + default: + { + return KErrArgument; + } + } + + TLbsPrivacyRequest::TLbsRequestAction requestAction(aPrivacy.RequestAction()); + switch(requestAction) + { + case TLbsPrivacyRequest::ERequestActionAllow: + case TLbsPrivacyRequest::ERequestActionReject: + break; // do nothing for good value(s) + case TLbsPrivacyRequest::ERequestActionNotUsed: + { + return KErrArgument; + } + default: + { + return KErrArgument; + } + } + + TLbsExternalRequestInfo::TRequestSource requestSource(aRequestInfo.RequestSource()); + TLbsExternalRequestInfo::TRequestType requestType(aRequestInfo.RequestType()); + TLbsExternalRequestInfo::TNetworkType networkType(aRequestInfo.NetworkType()); + TLbsExternalRequestInfo::TFormatIndicator requesterIdFormatIndicator(aRequestInfo.RequesterIdFormat()); + TLbsExternalRequestInfo::TFormatIndicator clientFormatIndicator(aRequestInfo.ClientNameFormat()); + + switch(requestSource) + { + case TLbsExternalRequestInfo::ERequestSourceLocal: + { + switch(requestType) + { + case TLbsExternalRequestInfo::ERequestSingleShot: + case TLbsExternalRequestInfo::ERequestPeriodic: + case TLbsExternalRequestInfo::ERequestSingleShotSilent: + case TLbsExternalRequestInfo::ERequestPeriodicSilent: + break; // do nothing for good value(s) + case TLbsExternalRequestInfo::ERequestAreaEvent: + case TLbsExternalRequestInfo::ERequestAreaEventSilent: + { + return KErrNotSupported; + } + case TLbsExternalRequestInfo::ERequestTypeUnknown: + { + return KErrArgument; + } + default: + { + return KErrArgument; + } + } + + switch(networkType) + { + case TLbsExternalRequestInfo::ENetworkTypeUnknown: + break; // do nothing for good value(s) + case TLbsExternalRequestInfo::ENetworkGSM: + case TLbsExternalRequestInfo::ENetworkSUPL: + case TLbsExternalRequestInfo::ENetworkWCDMA: + { + return KErrArgument; + } + default: + { + return KErrArgument; + } + } + + // Return KErrArgument if both formatIndicators are EFormatUnknown + if((requesterIdFormatIndicator == TLbsExternalRequestInfo::EFormatUnknown)&& + (clientFormatIndicator == TLbsExternalRequestInfo::EFormatUnknown)) + { + return KErrArgument; + } + if(requesterIdFormatIndicator != TLbsExternalRequestInfo::EFormatUnknown) + { + switch(requesterIdFormatIndicator) + { + case TLbsExternalRequestInfo::EFormatLogicalName: + case TLbsExternalRequestInfo::EFormatEmailAddress: + case TLbsExternalRequestInfo::EFormatMSISDN: + case TLbsExternalRequestInfo::EFormatURL: + case TLbsExternalRequestInfo::EFormatSIPURL : + case TLbsExternalRequestInfo::EFormatIMSPublicIdentity: + case TLbsExternalRequestInfo::EFormatMIN: + case TLbsExternalRequestInfo::EFormatMDN: + case TLbsExternalRequestInfo::EFormatAppUID: + break; // do nothing for good value(s) + default: + { + return KErrArgument; + } + } + } + if(clientFormatIndicator != TLbsExternalRequestInfo::EFormatUnknown) + { + switch(clientFormatIndicator) + { + case TLbsExternalRequestInfo::EFormatLogicalName: + case TLbsExternalRequestInfo::EFormatEmailAddress: + case TLbsExternalRequestInfo::EFormatMSISDN: + case TLbsExternalRequestInfo::EFormatURL: + case TLbsExternalRequestInfo::EFormatSIPURL : + case TLbsExternalRequestInfo::EFormatIMSPublicIdentity: + case TLbsExternalRequestInfo::EFormatMIN: + case TLbsExternalRequestInfo::EFormatMDN: + case TLbsExternalRequestInfo::EFormatAppUID: + break; // do nothing for good value(s) + default: + { + return KErrArgument; + } + } + } + break; + } + + case TLbsExternalRequestInfo::ERequestSourceNetwork: + { + switch(requestType) + { + case TLbsExternalRequestInfo::ERequestSingleShot: + case TLbsExternalRequestInfo::ERequestPeriodic: + case TLbsExternalRequestInfo::ERequestAreaEvent: + case TLbsExternalRequestInfo::ERequestSingleShotSilent: + case TLbsExternalRequestInfo::ERequestPeriodicSilent: + case TLbsExternalRequestInfo::ERequestAreaEventSilent: + break; // do nothing for good value(s) + case TLbsExternalRequestInfo::ERequestTypeUnknown: + { + return KErrArgument; + } + default: + { + return KErrArgument; + } + } + + switch(networkType) + { + case TLbsExternalRequestInfo::ENetworkGSM: + case TLbsExternalRequestInfo::ENetworkSUPL: + case TLbsExternalRequestInfo::ENetworkWCDMA: + break; // do nothing for good value(s) + case TLbsExternalRequestInfo::ENetworkTypeUnknown: + { + return KErrArgument; + } + default: + { + return KErrArgument; + } + } + // Return KErrArgument if both formatIndicators are EFormatUnknown + if((requesterIdFormatIndicator == TLbsExternalRequestInfo::EFormatUnknown)&& + (clientFormatIndicator == TLbsExternalRequestInfo::EFormatUnknown)) + { + return KErrArgument; + } + if(requesterIdFormatIndicator != TLbsExternalRequestInfo::EFormatUnknown) + { + switch(requesterIdFormatIndicator) + { + case TLbsExternalRequestInfo::EFormatLogicalName: + case TLbsExternalRequestInfo::EFormatEmailAddress: + case TLbsExternalRequestInfo::EFormatMSISDN: + case TLbsExternalRequestInfo::EFormatURL: + case TLbsExternalRequestInfo::EFormatSIPURL : + case TLbsExternalRequestInfo::EFormatIMSPublicIdentity: + break; // do nothing for good value(s) + case TLbsExternalRequestInfo::EFormatMIN: + case TLbsExternalRequestInfo::EFormatMDN: + { + if (networkType != TLbsExternalRequestInfo::ENetworkSUPL) + { + return KErrArgument; + } + } + break; + case TLbsExternalRequestInfo::EFormatAppUID: + { + return KErrArgument; + } + default: + { + return KErrArgument; + } + } + } + if(clientFormatIndicator != TLbsExternalRequestInfo::EFormatUnknown) + { + switch(clientFormatIndicator) + { + case TLbsExternalRequestInfo::EFormatLogicalName: + case TLbsExternalRequestInfo::EFormatEmailAddress: + case TLbsExternalRequestInfo::EFormatMSISDN: + case TLbsExternalRequestInfo::EFormatURL: + case TLbsExternalRequestInfo::EFormatSIPURL : + case TLbsExternalRequestInfo::EFormatIMSPublicIdentity: + break; // do nothing for good value(s) + case TLbsExternalRequestInfo::EFormatMIN: + case TLbsExternalRequestInfo::EFormatMDN: + { + if (networkType != TLbsExternalRequestInfo::ENetworkSUPL) + { + return KErrArgument; + } + } + break; + case TLbsExternalRequestInfo::EFormatAppUID: + { + return KErrArgument; + } + default: + { + return KErrArgument; + } + } + } + break; + } + + case TLbsExternalRequestInfo::ERequestSourceUnknown: + { + return KErrArgument; + } + default: + { + return KErrArgument; + } + } + return KErrNone; + } + +TInt CLbsPrivacyRequestImpl::ValidateRepeatPrivReqArguments(const TLbsPrivacyRequestId aRequestId, const TLbsPrivacyRequest& aPrivacy, const TLbsExternalRequestInfo& aRequestInfo) + { + if((aRequestId == 0) || (aRequestId > KMaxTInt)) + { + return KErrArgument; + } + + TLbsPrivacyRequest::TLbsRequestAdvice requestAdvice(aPrivacy.RequestAdvice()); + switch(requestAdvice) + { + case TLbsPrivacyRequest::ERequestAdviceNotify: + break; // do nothing for good value(s) + case TLbsPrivacyRequest::ERequestAdviceVerify: + case TLbsPrivacyRequest::ERequestAdviceSilent: + case TLbsPrivacyRequest::ERequestAdviceNotUsed: + { + return KErrArgument; + } + case TLbsPrivacyRequest::ERequestAdviceStealth: + { + return KErrNotSupported; + } + default: + { + return KErrArgument; + } + } + + TLbsPrivacyRequest::TLbsRequestAction requestAction(aPrivacy.RequestAction()); + switch(requestAction) + { + case TLbsPrivacyRequest::ERequestActionAllow: + case TLbsPrivacyRequest::ERequestActionReject: + break; // do nothing for good value(s) + case TLbsPrivacyRequest::ERequestActionNotUsed: + { + return KErrArgument; + } + default: + { + return KErrArgument; + } + } + + TLbsExternalRequestInfo::TRequestSource requestSource(aRequestInfo.RequestSource()); + TLbsExternalRequestInfo::TRequestType requestType(aRequestInfo.RequestType()); + TLbsExternalRequestInfo::TNetworkType networkType(aRequestInfo.NetworkType()); + TLbsExternalRequestInfo::TFormatIndicator requesterIdFormatIndicator(aRequestInfo.RequesterIdFormat()); + TLbsExternalRequestInfo::TFormatIndicator clientFormatIndicator(aRequestInfo.ClientNameFormat()); + + switch(requestSource) + { + case TLbsExternalRequestInfo::ERequestSourceNetwork: + { + switch(requestType) + { + case TLbsExternalRequestInfo::ERequestSingleShot: + case TLbsExternalRequestInfo::ERequestPeriodic: + case TLbsExternalRequestInfo::ERequestAreaEvent: + case TLbsExternalRequestInfo::ERequestSingleShotSilent: + case TLbsExternalRequestInfo::ERequestPeriodicSilent: + case TLbsExternalRequestInfo::ERequestAreaEventSilent: + break; // do nothing for good value(s) + case TLbsExternalRequestInfo::ERequestTypeUnknown: + { + return KErrArgument; + } + default: + { + return KErrArgument; + } + } + + switch(networkType) + { + case TLbsExternalRequestInfo::ENetworkGSM: + case TLbsExternalRequestInfo::ENetworkSUPL: + case TLbsExternalRequestInfo::ENetworkWCDMA: + break; // do nothing for good value(s) + case TLbsExternalRequestInfo::ENetworkTypeUnknown: + { + return KErrArgument; + } + default: + { + return KErrArgument; + } + } + // Return KErrArgument if both formatIndicators are EFormatUnknown + if((requesterIdFormatIndicator == TLbsExternalRequestInfo::EFormatUnknown)&& + (clientFormatIndicator == TLbsExternalRequestInfo::EFormatUnknown)) + { + return KErrArgument; + } + if(requesterIdFormatIndicator != TLbsExternalRequestInfo::EFormatUnknown) + { + switch(requesterIdFormatIndicator) + { + case TLbsExternalRequestInfo::EFormatLogicalName: + case TLbsExternalRequestInfo::EFormatEmailAddress: + case TLbsExternalRequestInfo::EFormatMSISDN: + case TLbsExternalRequestInfo::EFormatURL: + case TLbsExternalRequestInfo::EFormatSIPURL : + case TLbsExternalRequestInfo::EFormatIMSPublicIdentity: + break; // do nothing for good value(s) + case TLbsExternalRequestInfo::EFormatMIN: + case TLbsExternalRequestInfo::EFormatMDN: + { + if (networkType != TLbsExternalRequestInfo::ENetworkSUPL) + { + return KErrArgument; + } + } + break; + case TLbsExternalRequestInfo::EFormatAppUID: + { + return KErrArgument; + } + default: + { + return KErrArgument; + } + } + } + if(clientFormatIndicator != TLbsExternalRequestInfo::EFormatUnknown) + { + switch(clientFormatIndicator) + { + case TLbsExternalRequestInfo::EFormatLogicalName: + case TLbsExternalRequestInfo::EFormatEmailAddress: + case TLbsExternalRequestInfo::EFormatMSISDN: + case TLbsExternalRequestInfo::EFormatURL: + case TLbsExternalRequestInfo::EFormatSIPURL : + case TLbsExternalRequestInfo::EFormatIMSPublicIdentity: + break; // do nothing for good value(s) + case TLbsExternalRequestInfo::EFormatMIN: + case TLbsExternalRequestInfo::EFormatMDN: + { + if (networkType != TLbsExternalRequestInfo::ENetworkSUPL) + { + return KErrArgument; + } + } + break; + case TLbsExternalRequestInfo::EFormatAppUID: + { + return KErrArgument; + } + default: + { + return KErrArgument; + } + } + } + break; + } + + case TLbsExternalRequestInfo::ERequestSourceLocal: + case TLbsExternalRequestInfo::ERequestSourceUnknown: + { + return KErrArgument; + } + default: + { + return KErrArgument; + } + } + return KErrNone; + } + +void CLbsPrivacyRequestImpl::RemoveHandler(CPrivacyRequestResponseHandler* aHandler) + { + for(TUint index = 0; index < iResponseHandler.Count(); ++index) + { + if(iResponseHandler[index] == aHandler) + { + iResponseHandler.Remove(index); + break; + } + } + }