messagingfw/suplwappushhandler/src/LbsSuplWapPush.cpp
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/suplwappushhandler/src/LbsSuplWapPush.cpp	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,235 @@
+// 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:
+// The main SUPL WAP Push Plug-in class. It implements the ECOM interface, listens for the incoming messages,
+// and notifies the SPM via the SUPL Push API.
+// 
+//
+
+/**
+ @file
+ @internalComponent
+ @prototype
+*/
+
+#include <ecom/implementationproxy.h>
+
+#include "LbsSuplWapPush.h"
+#include "lbsdevloggermacros.h"
+
+
+/** ECOM implementation table */
+const TImplementationProxy ImplementationTable[] = 
+	{
+	IMPLEMENTATION_PROXY_ENTRY(0x10283758, CLbsSuplWapPush::NewL)
+	};
+
+/** The only exported ECOM entry point function */
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+	return ImplementationTable;
+	}
+
+/**
+Static factory method for creating an instance of the CLbsSuplWapPush class.
+
+@return An instance of the class. The calling application becomes the
+owner of the returned instance and is responsible its disposal.
+
+@leave If a error happens, it leaves with one of the system error codes.
+*/
+CLbsSuplWapPush* CLbsSuplWapPush::NewL()
+	{
+	CLbsSuplWapPush* self= new (ELeave) CLbsSuplWapPush();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+/**
+Constructor.
+
+@see CLbsSuplWapPush::NewL
+*/
+CLbsSuplWapPush::CLbsSuplWapPush()
+	{
+	}
+
+
+/**
+Destructor. Deletes the SUPL Push API object.
+*/
+CLbsSuplWapPush::~CLbsSuplWapPush()
+	{
+	LBSLOG(ELogP2, "SUPL WAP Push : CLbsSuplWapPush::~CLbsSuplWapPush");
+	delete iSuplPush;
+	}
+
+/**
+2nd phase constructor. Creates the SUPL Push API object.
+
+@leave If a error happens, it leaves with one of the system error codes.
+
+@see CLbsSuplWapPush::NewL
+*/
+void CLbsSuplWapPush::ConstructL()
+	{
+	LBSLOG(ELogP2, "SUPL WAP Push : CLbsSuplWapPush::ConstructL");
+	iSuplPush = CLbsSuplPush::NewL(ELbsSuplPushChannelWAP, *this);
+	}
+
+/**
+ 	From MLbsSuplPushObserver.
+	Receive notification that the SUPL Init message has been sent to the LBS sub-system.
+	The call-back is invoked immediately after delivery of the SUPL INIT request and 
+	does not provide any information about it's outcome, e.g. conflict control results,
+	host validation results, connection results etc.
+	
+	@param aChannel  [In] The channel the call-back is related to.
+	@param aReqId    [In] An Id of the request the call-back is related to.
+	@param aError    [In] KErrNone if successful, KErrTimeout if it was not possible to deliver
+	                      the request before the timeout period, KErrArgument if the structure 
+	                      or content of the SUPL INIT message was incorrect. 
+	                      Any system wide error code otherwise.
+	@param aReserved [In] Reserved for future use.
+	
+	@see CLbsSuplPush::SuplInit
+	@see MLbsSuplPushObserver::OnSuplInitComplete
+*/
+void CLbsSuplWapPush::OnSuplInitComplete(TLbsSuplPushChannel /*aChannel*/, TLbsSuplPushRequestId aReqId, 
+			TInt aError, TInt /*aReserved*/)
+	{
+	if(aError==KErrNone)
+		{
+		LBSLOG2(ELogP3,"SUPL WAP Push : Message delivered successfully, reqId=%d", aReqId);
+		}
+	else
+		{
+		LBSLOG3(ELogP3,"SUPL WAP Push : Message delivery failed, reqId=%d, err=%d", aReqId, aError);
+		}
+#ifndef TE_UNITTESTMODE_ON
+	__ASSERT_DEBUG(iPluginKiller, User::Invariant());
+	iPluginKiller->KillPushPlugin();
+#endif //TE_UNITTESTMODE_ON
+	}
+
+
+/**
+Handles a push message asynchronously. It is not used since Symbian OS 8.0 when the 
+implementation of the WAP Stack was cut down and support for the connection-oriented 
+WAP Push was stopped.
+
+@param aPushMsg [In]  Push message. Ownership of the message is passed to the object.
+@param aStatus  [Out] Asynchronous status word.
+
+@leave If a error happens, it leaves with one of the system error codes.
+*/
+void CLbsSuplWapPush::HandleMessageL(CPushMessage* /*aPushMsg*/, TRequestStatus& /*aStatus*/)
+	{
+	//Intentionally left blank
+	}
+
+/**
+Handles a push message synchronously. 
+
+@param aPushMsg [In]  Push message. Ownership of the message is passed to the object.
+
+@leave If a error happens, it leaves with one of the system error codes.
+*/
+void CLbsSuplWapPush::HandleMessageL(CPushMessage* aPushMsg)
+	{
+	LBSLOG(ELogP3, "SUPL WAP Push : CLbsSuplWapPush::HandleMessageL");
+	if(aPushMsg)
+		{
+		TPtrC8 body;
+		TBool hasBody=aPushMsg->GetMessageBody(body);
+		if(hasBody)
+			{
+			TLbsSuplPushRequestId reqId;
+			TInt err=iSuplPush->SuplInit(reqId, body, 0);
+			if(KErrNone==err)
+				{
+				LBSLOG2(ELogP3,"SUPL WAP Push : Started to deliver the message, reqId=%d", reqId);
+				delete aPushMsg;
+				return;
+				}
+			else
+				{
+				LBSLOG2(ELogP3,"SUPL WAP Push : CLbsSuplPush::SuplInit failed, err=%d", err);
+				}
+			}
+		else
+			{
+			LBSLOG(ELogP3, "SUPL WAP Push : Empty message body, the message is skipped");
+			}
+		delete aPushMsg;
+		}
+	else
+		{
+		LBSLOG(ELogP3, "SUPL WAP Push : Null message pointer, the message is skipped");
+		}
+#ifndef TE_UNITTESTMODE_ON	
+	__ASSERT_DEBUG(iPluginKiller, User::Invariant());
+	iPluginKiller->KillPushPlugin();
+#endif //TE_UNITTESTMODE_ON	
+	}
+
+
+/**
+Cancels an outstanding HandleMessageL call. It is not used since Symbian OS 8.0 when the 
+implementation of the WAP Stack was cut down and support for the connection-oriented WAP Push 
+was stopped.
+*/
+void CLbsSuplWapPush::CancelHandleMessage()
+	{
+	//Intentionally left blank
+	}
+
+/**
+Reserved for future expansion.
+*/
+void CLbsSuplWapPush::CPushHandlerBase_Reserved1()
+	{
+	//Intentionally left blank
+	}
+
+/**
+Reserved for future expansion.
+*/
+void CLbsSuplWapPush::CPushHandlerBase_Reserved2()
+	{
+	//Intentionally left blank
+	}
+
+/**
+Called when CActive::Cancel method is called. It is not used in this implementation.
+
+@see CActive::DoCancel
+*/
+void CLbsSuplWapPush::DoCancel()
+	{
+	//Intentionally left blank
+	}
+
+/**
+Overrides pure virtual CActive::RunL. It is not used in this implementation.
+
+@see CActive::RunL
+*/
+void CLbsSuplWapPush::RunL()
+	{
+	//Intentionally left blank
+	}
+