diff -r 78fbd574edf4 -r da856f45b798 zeroconf/client/src/cmdnspnpservicepublisher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/zeroconf/client/src/cmdnspnpservicepublisher.cpp Thu Jun 24 19:09:47 2010 +0530 @@ -0,0 +1,156 @@ +// 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: +// cmdnspnpservicepublisherimpl.cpp +// +// + +//User include +#include "cmdnspnpservicepublisherimpl.h" +__FLOG_STMT(_LIT8(KComponent,"CMDnsServicePublisherImpl");) +/* + *Default constructor + */ +CMDnsServicePublisherImpl::CMDnsServicePublisherImpl () + { + __FLOG_OPEN(KMDNSSubsystem, KComponent); + } + +/* + * Two phase constructor + */ +CMDnsServicePublisherImpl* CMDnsServicePublisherImpl::NewL() + { + + return new ( ELeave ) CMDnsServicePublisherImpl; + + } + +/* + * Destructor + */ +CMDnsServicePublisherImpl::~CMDnsServicePublisherImpl () + { + __FLOG(_L8("CMDnsServicePublisherImpl::~CMDnsServicePublisherImpl - Entry")); + iMdns.Close(); + __FLOG(_L8("CMDnsServicePublisherImpl::~CMDnsServicePublisherImpl - Exit")); + __FLOG_CLOSE; + } + +/* + * virtual function in the base class CPnPServicePublisherBase + * Will be called to construct the object. + * Launches the Mdns server if not already and creates a new session. + * Graps the Iap and sends the same to server to use . + * + */ +TInt CMDnsServicePublisherImpl::Construct(TUint /*aTierId*/) + { + __FLOG(_L8("CMDnsServicePublisherImpl::Construct - Entry")); + RSocketServ sockServ; + RConnection connection; + TInt error = sockServ.Connect(); + error = connection.Open(sockServ); + + // start a connection, and grab the IAP ID + error = connection.Start(); + + TUint32 iap ; + _LIT(KCommdbIapSetting, "IAP\\Id"); + connection.GetIntSetting(KCommdbIapSetting, iap); + iMdns.Open(iap); + connection.Close(); + sockServ.Close(); + __FLOG(_L8("CMDnsServicePublisherImpl::Construct - Exit")); + return error; + } + +/* + * Publishes the service client sent along with bundle. + * any error will be notified back using the Observer inside the bundle. + */ +void CMDnsServicePublisherImpl::Publish ( const RPnPParameterBundle& aServiceInfo ) + { + __FLOG(_L8("CMDnsServicePublisherImpl::Publish - Entry")); + TRAPD(err, PublishL( aServiceInfo )); + if(err != KErrNone ) + aServiceInfo.PnPObserver()->OnPnPError(err); + __FLOG(_L8("CMDnsServicePublisherImpl::Publish - Exit")); + } + +/* + *Leaving function which publish any services client want to . + *Might contain the additional text record . If client wish to publish. + *@param aServiceInfo RPnpParameterBundle contains the domainName need to be published. + */ +void CMDnsServicePublisherImpl::PublishL (const RPnPParameterBundle& aServiceInfo ) + { + __FLOG(_L8("CMDnsServicePublisherImpl::PublishL - Entry")); + TBool isUpdate = EFalse; + HBufC8* data = HBufC8::NewLC(aServiceInfo.Length()); + TPtr8 buffer = data->Des(); + aServiceInfo.Store(buffer); + RPnPParameterBundle serviceInfo; + serviceInfo.CreateL(); + serviceInfo.Load(buffer); + RParameterFamily publishFamily = serviceInfo.FindFamily( EMdnsPublishParamset) ; + if(!publishFamily.IsNull() && publishFamily.CountParameterSets()>0) + { + CMDnsPublishParamSet* publishParamSet = static_cast (publishFamily.GetParameterSetAtIndex ( 0, RParameterFamily::ERequested )); + isUpdate = publishParamSet->PublishUpdate(); + } + iMdns.RegisterServiceL(aServiceInfo,isUpdate); + serviceInfo.Close(); + CleanupStack::PopAndDestroy();//data + __FLOG(_L8("CMDnsServicePublisherImpl::PublishL - Exit")); + } + +/* + * Used to request for any notification of the service type client is interested in . + * @param aServiceInfo a RPnPParameterBundle which contains the servicetype , + * client is interested in . + */ +void CMDnsServicePublisherImpl::SendNotify ( const RPnPParameterBundle& aServiceInfo ) + { + __FLOG(_L8("CMDnsServicePublisherImpl::SendNotify - Entry")); + TRAPD( err, SendNotifyL( aServiceInfo )); + if ( err != KErrNone ) + aServiceInfo.PnPObserver()->OnPnPError(err); + __FLOG(_L8("CMDnsServicePublisherImpl::SendNotify - Exit")); + } + +/* + *@param aServiceInfo a RPnPParameterBundle which contains the servicetype , + *client is interested in . + */ +void CMDnsServicePublisherImpl::SendNotifyL ( const RPnPParameterBundle& aServiceInfo ) + { + __FLOG(_L8("CMDnsServicePublisherImpl::SendNotifyL - Entry")); + iMdns.RegisterServiceL(aServiceInfo); + __FLOG(_L8("CMDnsServicePublisherImpl::SendNotifyL - Exit")); + } + +/* + * Nothing to do with this . + * Might need it in future. + */ +CControlChannelBase* CMDnsServicePublisherImpl::InitiateControlL () + { + __FLOG(_L8("CMDnsServicePublisherImpl::InitiateControlL - Entry")); + //Nothing to do . + //Not Implemented + __FLOG(_L8("CMDnsServicePublisherImpl::InitiateControlL - Exit")); + return NULL; + } + +