[BACK]Return to Interest.h CVS log [TXT][DIR] Up to [Development] / fam / fam

Annotation of fam/fam/Interest.h, Revision 1.1.1.1

1.1       trev        1: //  Copyright (C) 1999 Silicon Graphics, Inc.  All Rights Reserved.
                      2: //
                      3: //  This program is free software; you can redistribute it and/or modify it
                      4: //  under the terms of version 2 of the GNU General Public License as
                      5: //  published by the Free Software Foundation.
                      6: //
                      7: //  This program is distributed in the hope that it would be useful, but
                      8: //  WITHOUT ANY WARRANTY; without even the implied warranty of
                      9: //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  Further, any
                     10: //  license provided herein, whether implied or otherwise, is limited to
                     11: //  this program in accordance with the express provisions of the GNU
                     12: //  General Public License.  Patent licenses, if any, provided herein do not
                     13: //  apply to combinations of this program with other product or programs, or
                     14: //  any other product whatsoever.  This program is distributed without any
                     15: //  warranty that the program is delivered free of the rightful claim of any
                     16: //  third person by way of infringement or the like.  See the GNU General
                     17: //  Public License for more details.
                     18: //
                     19: //  You should have received a copy of the GNU General Public License along
                     20: //  with this program; if not, write the Free Software Foundation, Inc., 59
                     21: //  Temple Place - Suite 330, Boston MA 02111-1307, USA.
                     22:
                     23: #ifndef Interest_included
                     24: #define Interest_included
                     25:
                     26: #include <sys/stat.h>
                     27: #include <sys/types.h>
                     28: #include <sys/time.h>
                     29: #include <netinet/in.h>  //  for in_addr
                     30:
                     31: #include "Boolean.h"
                     32:
                     33: class Event;
                     34: class FileSystem;
                     35: class IMon;
                     36: struct stat;
                     37:
                     38: //  Interest -- abstract base class for filesystem entities of interest.
                     39: //
                     40: //  An Interest is monitored by imon or, if imon fails, it is polled
                     41: //  by the Pollster.
                     42: //
                     43: //  All Interests are kept in a global table keyed by dev/ino.
                     44: //
                     45: //  The classes derived from Interest are...
                     46: //
                     47: //	ClientInterest		an Interest a Client has explicitly monitored
                     48: //	Directory		a directory
                     49: //	File			a file
                     50: //	DirEntry		an entry in a monitored directory
                     51:
                     52: class Interest {
                     53:
                     54: public:
                     55:
                     56:     enum ExportVerification { VERIFY_EXPORTED, NO_VERIFY_EXPORTED };
                     57:
                     58:     Interest(const char *name, FileSystem *, in_addr host, ExportVerification);
                     59:     virtual ~Interest();
                     60:
                     61:     const char *name() const		{ return myname; }
                     62:     bool exists() const		{ return old_stat.st_mode != 0; }
                     63:     bool isdir() const    { return (old_stat.st_mode & S_IFMT) == S_IFDIR; }
                     64:     virtual bool active() const = 0;
                     65:     bool needs_scan() const		{ return scan_state != OK; }
                     66:     void needs_scan(bool tf)		{ scan_state = tf ? NEEDS_SCAN : OK; }
                     67:     void mark_for_scan()		{ needs_scan(true); }
                     68:     virtual bool do_scan();
                     69:     void report_exec_state();
                     70:
                     71:     virtual bool scan(Interest * = 0) = 0;
                     72:     virtual void unscan(Interest * = 0) = 0;
                     73:     void poll()				{ scan(); }
                     74:
                     75:     //  Public Class Method
                     76:
                     77:     static void imon_handler(dev_t, ino_t, int event);
                     78:
                     79:     static void enable_xtab_verification(bool enable);
                     80:
                     81: protected:
                     82:
                     83:     bool do_stat();
                     84:     virtual void post_event(const Event&, const char * = NULL) = 0;
                     85:     char& ci_bits()			{ return ci_char; }
                     86:     char& dir_bits()			{ return dir_char; }
                     87:     const char& ci_bits() const		{ return ci_char; }
                     88:     const char& dir_bits() const	{ return dir_char; }
                     89:     const in_addr& host() const         { return myhost; }
                     90:     void verify_exported_to_host();
                     91:     bool exported_to_host() const       { return mypath_exported_to_host; }
                     92:
                     93: private:
                     94:
                     95:     enum { HASHSIZE = 257 };
                     96:     enum ScanState	{ OK, NEEDS_SCAN };
                     97:     enum ExecState	{ EXECUTING, NOT_EXECUTING };
                     98:
                     99:     //  Instance Variables
                    100:
                    101:     Interest *hashlink;
                    102:     dev_t dev;
                    103:     ino_t ino;
                    104:     char *const myname;
                    105:     ScanState     scan_state: 1;
                    106:     ExecState cur_exec_state: 1;
                    107:     ExecState old_exec_state: 1;
                    108:     char ci_char;
                    109:     char dir_char;
                    110:     struct stat old_stat;
                    111:     in_addr myhost;
                    112:     bool mypath_exported_to_host;
                    113:
                    114:
                    115:     //  Private Instance Methods
                    116:
                    117:     bool dev_ino(dev_t, ino_t);
                    118:     void revoke();
                    119:     virtual void notify_created(Interest *) = 0;
                    120:     virtual void notify_deleted(Interest *) = 0;
                    121:
                    122:     //  Class Variables
                    123:
                    124:     static IMon imon;
                    125:     static Interest *hashtable[HASHSIZE];
                    126:     static bool xtab_verification;
                    127:
                    128:     //  The Hashing Function
                    129:
                    130:     static Interest **hashchain(dev_t d, ino_t i)
                    131: 			  { return &hashtable[(unsigned) (d + i) % HASHSIZE]; }
                    132:     Interest **hashchain() const	{ return hashchain(dev, ino); }
                    133:
                    134:     Interest(const Interest&);		// Do not copy
                    135:     Interest & operator = (const Interest&);	//  or assign.
                    136:
                    137: };
                    138:
                    139: #endif /* !Interest_included */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>