plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

9.h (4489B)


      1 #include <auth.h>
      2 #include <fcall.h>
      3 
      4 enum {
      5 	NFidHash	= 503,
      6 };
      7 
      8 typedef struct Con Con;
      9 typedef struct DirBuf DirBuf;
     10 typedef struct Excl Excl;
     11 typedef struct Fid Fid;
     12 typedef struct Fsys Fsys;
     13 typedef struct Msg Msg;
     14 
     15 #pragma incomplete DirBuf
     16 #pragma incomplete Excl
     17 #pragma incomplete Fsys
     18 
     19 struct Msg {
     20 	uchar*	data;
     21 	u32int	msize;			/* actual size of data */
     22 	Fcall	t;
     23 	Fcall	r;
     24 	Con*	con;
     25 
     26 	Msg*	anext;			/* allocation free list */
     27 
     28 	Msg*	mnext;			/* all active messsages on this Con */
     29 	Msg* 	mprev;
     30 
     31 	int	state;			/* */
     32 
     33 	Msg*	flush;			/* flushes waiting for this Msg */
     34 
     35 	Msg*	rwnext;			/* read/write queue */
     36 	int	nowq;			/* do not place on write queue */
     37 };
     38 
     39 enum {
     40 	MsgN		= 0,
     41 	MsgR		= 1,
     42 	Msg9		= 2,
     43 	MsgW		= 3,
     44 	MsgF		= 4,
     45 };
     46 
     47 enum {
     48 	ConNoneAllow	= 1<<0,
     49 	ConNoAuthCheck	= 1<<1,
     50 	ConNoPermCheck	= 1<<2,
     51 	ConWstatAllow	= 1<<3,
     52 	ConIPCheck	= 1<<4,
     53 };
     54 struct Con {
     55 	char*	name;
     56 	uchar*	data;			/* max, not negotiated */
     57 	int	isconsole;		/* immutable */
     58 	int	flags;			/* immutable */
     59 	char	remote[128];		/* immutable */
     60 	QLock	lock;
     61 	int	state;
     62 	int	fd;
     63 	Msg*	version;
     64 	u32int	msize;			/* negotiated with Tversion */
     65 	Rendez	rendez;
     66 
     67 	Con*	anext;			/* alloc */
     68 	Con*	cnext;			/* in use */
     69 	Con*	cprev;
     70 
     71 	RWLock	alock;
     72 	int	aok;			/* authentication done */
     73 
     74 	QLock	mlock;
     75 	Msg*	mhead;			/* all Msgs on this connection */
     76 	Msg*	mtail;
     77 	Rendez	mrendez;
     78 
     79 	QLock	wlock;
     80 	Msg*	whead;			/* write queue */
     81 	Msg*	wtail;
     82 	Rendez	wrendez;
     83 
     84 	QLock	fidlock;		/* */
     85 	Fid*	fidhash[NFidHash];
     86 	Fid*	fhead;
     87 	Fid*	ftail;
     88 	int	nfid;
     89 };
     90 
     91 enum {
     92 	ConDead		= 0,
     93 	ConNew		= 1,
     94 	ConDown		= 2,
     95 	ConInit		= 3,
     96 	ConUp		= 4,
     97 	ConMoribund	= 5,
     98 };
     99 
    100 struct Fid {
    101 	RWLock	lock;
    102 	Con*	con;
    103 	u32int	fidno;
    104 	int	ref;			/* inc/dec under Con.fidlock */
    105 	int	flags;
    106 
    107 	int	open;
    108 	Fsys*	fsys;
    109 	File*	file;
    110 	Qid	qid;
    111 	char*	uid;
    112 	char*	uname;
    113 	DirBuf*	db;
    114 	Excl*	excl;
    115 
    116 	QLock	alock;			/* Tauth/Tattach */
    117 	AuthRpc* rpc;
    118 	char*	cuname;
    119 
    120 	Fid*	sort;			/* sorted by uname in cmdWho */
    121 	Fid*	hash;			/* lookup by fidno */
    122 	Fid*	next;			/* clunk session with Tversion */
    123 	Fid*	prev;
    124 };
    125 
    126 enum {					/* Fid.flags and fidGet(..., flags) */
    127 	FidFCreate	= 0x01,
    128 	FidFWlock	= 0x02,
    129 };
    130 
    131 enum {					/* Fid.open */
    132 	FidOCreate	= 0x01,
    133 	FidORead	= 0x02,
    134 	FidOWrite	= 0x04,
    135 	FidORclose	= 0x08,
    136 };
    137 
    138 /*
    139  * 9p.c
    140  */
    141 extern int (*rFcall[Tmax])(Msg*);
    142 extern int validFileName(char*);
    143 
    144 /*
    145  * 9auth.c
    146  */
    147 extern int authCheck(Fcall*, Fid*, Fsys*);
    148 extern int authRead(Fid*, void*, int);
    149 extern int authWrite(Fid*, void*, int);
    150 
    151 /*
    152  * 9dir.c
    153  */
    154 extern void dirBufFree(DirBuf*);
    155 extern int dirDe2M(DirEntry*, uchar*, int);
    156 extern int dirRead(Fid*, uchar*, int, vlong);
    157 
    158 /*
    159  * 9excl.c
    160  */
    161 extern int exclAlloc(Fid*);
    162 extern void exclFree(Fid*);
    163 extern void exclInit(void);
    164 extern int exclUpdate(Fid*);
    165 
    166 /*
    167  * 9fid.c
    168  */
    169 extern void fidClunk(Fid*);
    170 extern void fidClunkAll(Con*);
    171 extern Fid* fidGet(Con*, u32int, int);
    172 extern void fidInit(void);
    173 extern void fidPut(Fid*);
    174 
    175 /*
    176  * 9fsys.c
    177  */
    178 extern void fsysFsRlock(Fsys*);
    179 extern void fsysFsRUnlock(Fsys*);
    180 extern Fs* fsysGetFs(Fsys*);
    181 extern Fsys* fsysGet(char*);
    182 extern char* fsysGetName(Fsys*);
    183 extern File* fsysGetRoot(Fsys*, char*);
    184 extern Fsys* fsysIncRef(Fsys*);
    185 extern int fsysInit(void);
    186 extern int fsysNoAuthCheck(Fsys*);
    187 extern int fsysNoPermCheck(Fsys*);
    188 extern void fsysPut(Fsys*);
    189 extern int fsysWstatAllow(Fsys*);
    190 
    191 /*
    192  * 9lstn.c
    193  */
    194 extern int lstnInit(void);
    195 
    196 /*
    197  * 9proc.c
    198  */
    199 extern Con* conAlloc(int, char*, int);
    200 extern void conInit(void);
    201 extern void msgFlush(Msg*);
    202 extern void msgInit(void);
    203 
    204 /*
    205  * 9srv.c
    206  */
    207 extern int srvInit(void);
    208 
    209 /*
    210  * 9user.c
    211  */
    212 extern int groupLeader(char*, char*);
    213 extern int groupMember(char*, char*);
    214 extern int groupWriteMember(char*);
    215 extern char* unameByUid(char*);
    216 extern char* uidByUname(char*);
    217 extern int usersInit(void);
    218 extern int usersFileRead(char*);
    219 extern int validUserName(char*);
    220 
    221 extern char* uidadm;
    222 extern char* unamenone;
    223 extern char* uidnoworld;
    224 
    225 /*
    226  * Ccli.c
    227  */
    228 extern int cliAddCmd(char*, int (*)(int, char*[]));
    229 extern int cliError(char*, ...);
    230 extern int cliInit(void);
    231 extern int cliExec(char*);
    232 #pragma	varargck	argpos	cliError	1
    233 
    234 /*
    235  * Ccmd.c
    236  */
    237 extern int cmdInit(void);
    238 
    239 /*
    240  * Ccons.c
    241  */
    242 extern int consPrompt(char*);
    243 extern int consInit(void);
    244 extern int consOpen(int, int, int);
    245 extern int consTTY(void);
    246 extern int consWrite(char*, int);
    247 
    248 /*
    249  * Clog.c
    250  */
    251 extern int consPrint(char*, ...);
    252 extern int consVPrint(char*, va_list);
    253 #pragma	varargck	argpos	consPrint	1
    254 
    255 /*
    256  * fossil.c
    257  */
    258 extern int Dflag;