zeroconf/client/src/cmdnsregisternotifier.cpp
changeset 14 da856f45b798
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/zeroconf/client/src/cmdnsregisternotifier.cpp	Thu Jun 24 19:09:47 2010 +0530
@@ -0,0 +1,155 @@
+// Copyright (c) 2008-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:
+// cmdnsregisternotifier.cpp
+// 
+//
+
+/**
+@file
+@internalTechnology
+*/
+
+//System include
+#include <mdns/mdnsparamset.h>
+#include <pnp/mpnpobserver.h>
+
+//User include
+#include "cmdnsregisternotifier.h"
+#include "cmdnsclient.h"
+__FLOG_STMT(_LIT8(KComponent,"CMdnsRegisterNotifier");)
+/*
+ * Two phase constructor
+ * @param aMdns reference to RMdns client object
+ */
+CMdnsRegisterNotifier* CMdnsRegisterNotifier::NewL(RMdns& aMdns)
+    {
+    CMdnsRegisterNotifier* self = new (ELeave) CMdnsRegisterNotifier(aMdns);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self ;
+    }
+/*
+ * Destructor
+ */
+CMdnsRegisterNotifier::~CMdnsRegisterNotifier()
+    {
+    __FLOG(_L8("CMdnsRegisterNotifier:: - Entry"));
+    //Cancel any pending asynchronous request.
+    Cancel();
+    delete iNotifyRcvdMessage;
+    iNotifyRcvdMessage = NULL;
+    __FLOG(_L8("CMdnsRegisterNotifier:: - Exit"));
+    __FLOG_CLOSE;
+    }
+
+/*
+ * Constructor
+ * @param aMdns reference to mdns object.
+ */
+CMdnsRegisterNotifier::CMdnsRegisterNotifier(RMdns& aMdns):CActive(EPriorityStandard),iMdns(aMdns),iPtrNotifyRcvdMessage(NULL,0,0)
+    {
+    
+    }
+
+/*
+ * Two phase constructor
+ * Construct a buffer to recieve a new record from the network.
+ * and start listening to it.
+ */
+void CMdnsRegisterNotifier::ConstructL()
+    {
+    __FLOG_OPEN(KMDNSSubsystem, KComponent);
+    __FLOG(_L8("CMdnsRegisterNotifier::ConstructL - Entry"));
+    CActiveScheduler::Add(this);
+    iNotifyRcvdMessage = HBufC8::NewL(KMaxDNSNameLength);
+    iPtrNotifyRcvdMessage.Set(iNotifyRcvdMessage->Des());
+    Start();
+    __FLOG(_L8("CMdnsRegisterNotifier::ConstructL - Exit"));
+    }
+/*
+ * Constructs a bundle and notifies the same to the client.
+ *  
+ */
+void CMdnsRegisterNotifier::RunL()
+    {
+    __FLOG(_L8("CMdnsRegisterNotifier::RunL - Entry"));
+    if(iObserver != NULL)
+        {
+        if(iStatus.Int() == KErrNone)
+            {
+            RPnPParameterBundle pnpBundle;
+            pnpBundle.CreateL();
+            pnpBundle.Load(iPtrNotifyRcvdMessage);
+            iObserver->OnPnPEventL(pnpBundle);
+            pnpBundle.Close();
+            }
+        else 
+            {
+            iObserver->OnPnPError(iStatus.Int());
+            }
+        }
+    Start();
+    __FLOG(_L8("CMdnsRegisterNotifier::RunL - Exit"));
+    }
+
+/*
+ * Clears the buffer .
+ */
+void CMdnsRegisterNotifier::DoCancel()
+    {
+    __FLOG(_L8("CMdnsRegisterNotifier::DoCancel - Entry"));
+    TRequestStatus * status = &iStatus;
+    User::RequestComplete(status,KErrCancel);
+    delete iNotifyRcvdMessage;
+    iNotifyRcvdMessage = NULL;
+    __FLOG(_L8("CMdnsRegisterNotifier::DoCancel - Exit"));
+    }
+
+/*
+ * Returns the error to activeschedluler as the RunL is not expected to leave.
+ * @param aError error with which RunL leaves.
+ * @return aError returns the error back to activescheduler .
+ */
+TInt CMdnsRegisterNotifier::RunError(TInt aError)
+    {
+    __FLOG(_L8("CMdnsRegisterNotifier::RunError - Entry"));
+    return aError;
+    __FLOG(_L8("CMdnsRegisterNotifier::RunError - Exit"));
+    }
+
+/*
+ * Start as Asynchoronous request and wait for this to be completed by the server .
+ * Will be called internally whenever a client requests for the notification.
+ * 
+ */
+void CMdnsRegisterNotifier::Start()
+    {
+    __FLOG(_L8("CMdnsRegisterNotifier::Start - Entry"));
+    iStatus = KRequestPending;
+    iMdns.RecieveNotifyMessageL(iPtrNotifyRcvdMessage,iStatus);
+    SetActive();
+    __FLOG(_L8("CMdnsRegisterNotifier::Start - Exit"));
+    }
+
+/*
+ * Set the observer
+ * @param aObserver a pointer to the observer sent by the client along with the bundle.
+ */
+void CMdnsRegisterNotifier::SetPnpObserver(MPnPObserver* aObserver)
+    {
+    __FLOG(_L8("CMdnsRegisterNotifier::SetPnpObserver - Entry"));
+    iObserver = aObserver;
+    __FLOG(_L8("CMdnsRegisterNotifier::SetPnpObserver - Exit"));
+    }