CNSLServiceLookupThread.cpp [plain text]
#include "CNSLHeaders.h"
CNSLServiceLookupThread::CNSLServiceLookupThread( CNSLPlugin* parentPlugin, char* serviceType, CNSLDirNodeRep* nodeDirRep )
{
DBGLOG( "CNSLServiceLookupThread::CNSLServiceLookupThread\n" );
mParentPlugin = parentPlugin;
mNodeToSearch = nodeDirRep;
mNeedToNotifyNodeToSearchWhenComplete = false; mCanceled = false;
mNodeName = mNodeToSearch->GetNodeName();
CFRetain( mNodeName );
mNodeToSearch->Retain();
if ( serviceType )
mServiceType = ::CFStringCreateWithCString( NULL, serviceType, kCFStringEncodingUTF8 );
else
{
DBGLOG( "CNSLServiceLookupThread::CNSLServiceLookupThread someone passed in a null serviceType!" );
mServiceType = ::CFStringCreateWithCString( NULL, "NULL_ServiceType", kCFStringEncodingUTF8 );
}
}
CNSLServiceLookupThread::~CNSLServiceLookupThread()
{
DBGLOG( "CNSLServiceLookupThread::~CNSLServiceLookupThread\n" );
if ( mNeedToNotifyNodeToSearchWhenComplete )
{
mNodeToSearch->ServiceLookupComplete( this );
}
mNodeToSearch->Release();
if ( !AreWeCanceled() )
{
mCanceled = true;
}
if ( mServiceType )
::CFRelease( mServiceType );
if ( mNodeName )
CFRelease( mNodeName );
}
void CNSLServiceLookupThread::Resume( void )
{
try
{
if ( !AreWeCanceled() )
{
mNodeToSearch->StartingNewLookup( this );
mNeedToNotifyNodeToSearchWhenComplete = true;
if ( !AreWeCanceled() )
DSLThread::Resume();
}
}
catch (...)
{
}
}
void CNSLServiceLookupThread::AddResult( CNSLResult* newResult )
{
DBGLOG( "CNSLServiceLookupThread::AddResult\n" );
if ( !newResult->GetAttributeRef( kDSNAttrLocationSAFE_CFSTR ) )
newResult->AddAttribute( kDSNAttrLocationSAFE_CFSTR, mNodeToSearch->GetNodeName() );
if ( !AreWeCanceled() )
mNodeToSearch->AddService( newResult );
}