[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     ! 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>