obex/obexextensionapi/src/obexserverpacketaccessextension.cpp
changeset 57 f6055a57ae18
parent 0 d0791faffa3f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/obex/obexextensionapi/src/obexserverpacketaccessextension.cpp	Tue Oct 19 11:00:12 2010 +0800
@@ -0,0 +1,84 @@
+// Copyright (c) 2005-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 <obex/extensionapis/obexserverpacketaccessextension.h>
+#include <obexserver.h>
+#include <obex/internal/mobexserverrequestpacketnotifyregister.h>
+#include "obexextensionapifaults.h"
+
+//Category used for internal panics
+_LIT(KPanicCat, "ObexExtApis");
+
+/**
+Factory function for CObexServerPacketAccessExtension. Will leave if the associated CObexServer 
+does not support this extension type.
+
+Note that this object needs to be deleted before the CObexServer object it is registered to is
+deleted.
+
+@param aServer Reference to the instance of CObexServer being extended.
+@param aPacketNotify Reference to the instance of MObexRequestPacketNotify to be notified of 
+incoming packets. Notifications will stop when this CObexServerPacketAccessExtension object is
+deleted.
+@return A pointer to a new CObexServerPacketAccessExtension object.
+*/
+EXPORT_C CObexServerPacketAccessExtension* CObexServerPacketAccessExtension::NewL(CObexServer& aServer, MObexServerRequestPacketNotify& aRequestPacketNotify)
+	{
+	CObexServerPacketAccessExtension* self = new (ELeave) CObexServerPacketAccessExtension();
+	CleanupStack::PushL(self);
+	self->ConstructL(aServer, aRequestPacketNotify);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+/**
+The destructor will not delete the instance of the MObexServerRequestPacketNotify
+it holds.  It will signal to the CObexServer instance that packet notification is
+no longer required, and so re-allow another CObexServerPacketAccessExtension to bind
+to the CObexServer instance.
+
+This should be called before the CObexServer instance the object is registered to
+is deleted.
+*/
+CObexServerPacketAccessExtension::~CObexServerPacketAccessExtension()
+	{
+	if (iRequestPacketNotify)
+		{
+		iRequestPacketNotify->DeleteObexServerRequestPacketNotifyRegister();
+		}
+	}
+
+/**
+Constructor.
+*/
+CObexServerPacketAccessExtension::CObexServerPacketAccessExtension()
+	{
+	
+	}
+
+/**
+Performs the main construction of the CObexServerPacketAccessExtension.
+
+@param aServer The CObexServer instance to register request packet notification callbacks.
+@param aRequestPacketNotify The mixin instance that will receive notification of request packets.
+*/
+void CObexServerPacketAccessExtension::ConstructL(CObexServer& aServer, MObexServerRequestPacketNotify& aRequestPacketNotify)
+	{
+	iRequestPacketNotify = static_cast<MObexServerRequestPacketNotifyRegister*>(aServer.ExtensionInterfaceL(KObexServerRequestPacketNotifyRegisterInterface));
+	// by here we should have a correctly cast instance, as otherwise we should have already left.
+	__ASSERT_ALWAYS(iRequestPacketNotify, User::Panic(KPanicCat, EInterfaceInstanceIsANullPointer));
+	iRequestPacketNotify->SetObexServerRequestPacketObserver(aRequestPacketNotify);
+	}
+