#ifndef _CSMBPlugin_
#include "LMBDiscoverer.h"
#include "CNSLPlugin.h"
#define kProtocolPrefixPlainStr "SMB"
#define kProtocolPrefixStr "/SMB"
#define kProtocolPrefixSlashStr "/SMB/"
#define kScopePrefixStr "Network Neighborhood(DS)"
#define kScopePrefixSlashStr "Network Neighborhood(DS)/"
#define kReadSMBConfigData 'read'
#define kWriteSMBConfigData 'writ'
#define kNMBLookupToolPath "/usr/bin/nmblookup"
#define kServiceTypeString "smb"
#define kTemplateConfFilePath "/etc/smb.conf.template"
#define kTempConfFilePath "/tmp/smb.conf.temp"
#define kConfFilePath "/etc/smb.conf"
#define kBrowsingConfFilePath "/var/run/smbbrowsing.conf"
class CSMBPlugin : public CNSLPlugin
{
public:
CSMBPlugin ( void );
virtual ~CSMBPlugin ( void );
virtual sInt32 InitPlugin ( void );
virtual sInt32 GetDirNodeInfo ( sGetDirNodeInfo *inData );
virtual void ActivateSelf ( void );
virtual void DeActivateSelf ( void );
uInt32 fSignature;
const char* GetWinsServer ( void ) { return mWINSServer; }
void NodeLookupIsCurrent ( void );
LMBDiscoverer* OurLMBDiscoverer ( void ) { return mLMBDiscoverer; }
void ClearLMBForWorkgroup ( CFStringRef workgroupRef, CFStringRef lmbNameRef );
protected:
void WriteWorkgroupToFile ( FILE* fp );
void WriteWINSToFile ( FILE* fp );
void WriteCodePageToFile ( FILE* fp );
void WriteUnixCharsetToFile ( FILE* fp );
void WriteDisplayCharsetToFile ( FILE* fp );
void ReadConfigFile ( void );
void WriteToConfigFile ( const char* pathToConfigFile );
void SaveKnownLMBsToDisk ( void );
void ReadKnownLMBsFromDisk ( void );
virtual sInt32 DoPlugInCustomCall ( sDoPlugInCustomCall *inData );
virtual sInt32 HandleNetworkTransition ( sHeader *inData );
virtual void ClearOutStaleNodes ( void ) {}
sInt32 FillOutCurrentState ( sDoPlugInCustomCall *inData );
void* MakeDataBufferOfWorkgroups( UInt32* dataLen );
virtual CFStringRef GetBundleIdentifier ( void );
virtual const char* GetProtocolPrefixString ( void ); virtual const char* GetLocalNodeString ( void ); virtual Boolean IsLocalNode ( const char *inNode );
virtual UInt32 GetTimeBetweenNodeLookups ( void );
virtual void NewNodeLookup ( void ); virtual void NewServiceLookup ( char* serviceType, CNSLDirNodeRep* nodeDirRep );
virtual Boolean OKToOpenUnPublishedNode ( const char* parentNodeName );
private:
void LockNodeState ( void ) { pthread_mutex_lock( &mNodeStateLock ); }
void UnLockNodeState ( void ) { pthread_mutex_unlock( &mNodeStateLock ); }
pthread_mutex_t mNodeStateLock;
void LockLMBsInProgress ( void ) { pthread_mutex_lock( &mListOfLMBsInProgressLock ); }
void UnLockLMBsInProgress ( void ) { pthread_mutex_unlock( &mListOfLMBsInProgressLock ); }
pthread_mutex_t mListOfLMBsInProgressLock;
Boolean mNodeListIsCurrent;
Boolean mNodeSearchInProgress;
char* mLocalNodeString;
char* mWINSServer;
char* mBroadcastAddr;
CFMutableArrayRef mOurLMBs;
CFMutableDictionaryRef mAllKnownLMBs;
CFMutableDictionaryRef mListOfLMBsInProgress;
Boolean mConfFileCodePageAlreadyModifiedByDS;
Boolean mInitialSearch;
Boolean mNeedFreshLookup;
Boolean mCurrentSearchCanceled;
UInt32 mTimeBetweenLookups;
LMBDiscoverer* mLMBDiscoverer;
};
#endif