CSLPNodeLookupThread.cpp [plain text]
#include "CSLPNodeLookupThread.h"
#include "CommandLineUtilities.h"
SLPBoolean SLPScopeLookupNotifier( SLPHandle hSLP, const char* pcScope, SLPInternalError errCode, void* pvCookie );
CSLPNodeLookupThread::CSLPNodeLookupThread( CNSLPlugin* parentPlugin )
: CNSLNodeLookupThread( parentPlugin )
{
DBGLOG( "CSLPNodeLookupThread::CSLPNodeLookupThread\n" );
mSLPRef = 0;
mCanceled = false;
mDoItAgain = false;
}
CSLPNodeLookupThread::~CSLPNodeLookupThread()
{
DBGLOG( "CSLPNodeLookupThread::~CSLPNodeLookupThread\n" );
}
void* CSLPNodeLookupThread::Run( void )
{
DBGLOG( "CSLPNodeLookupThread::Run\n" );
while ( !mCanceled )
{
SLPInternalError status = SLPOpen( "en", SLP_FALSE, &mSLPRef );
if ( status )
{
DBGLOG( "CSLPNodeLookupThread::CSLPNodeLookupThread, SLPOpen returned (%d) %s\n", status, slperror(status) );
}
else if ( mSLPRef )
{
SLPInternalError error = SLPFindScopesAsync( mSLPRef, SLPScopeLookupNotifier, this );
if ( error )
DBGLOG( "CSLPNodeLookupThread::CSLPNodeLookupThread, SLPFindScopesAsync returned (%d) %s\n", error, slperror(error) );
}
if( mSLPRef )
SLPClose( mSLPRef );
mSLPRef = NULL;
if ( mDoItAgain )
mDoItAgain = false;
else
break;
}
return NULL;
}
SLPBoolean SLPScopeLookupNotifier( SLPHandle hSLP, const char* pcScope, SLPInternalError errCode, void* pvCookie )
{
CSLPNodeLookupThread* lookupObj = (CSLPNodeLookupThread*)pvCookie;
SLPBoolean wantMoreData = SLP_FALSE;
if ( lookupObj && errCode == SLP_OK && pcScope && !lookupObj->IsCanceled() )
{
lookupObj->AddResult( pcScope );
wantMoreData = SLP_TRUE; }
return wantMoreData;
}