networkprotocolmodules/privacyprotocolmodule/ClientAPI/PrivacyRequestAPI/src/lbsprivacyrequestimpl.cpp
changeset 0 9cfd9a3ee49c
--- /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 <lbs/lbsnetcommon.h>
+
+
+/*
+* 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<TLbsNetPosRequestPrivacy::TLbsRequestAction>(aPrivacy.RequestAction()));
+	netPosRequestPrivacy.SetRequestAdvice(static_cast<TLbsNetPosRequestPrivacy::TLbsRequestAdvice>(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<TLbsNetPosRequestPrivacy::TLbsRequestAction>(aPrivacy.RequestAction()));
+	netPosRequestPrivacy.SetRequestAdvice(static_cast<TLbsNetPosRequestPrivacy::TLbsRequestAdvice>(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;
+			}
+		}
+	}